web前端测试相关知识
-
web测试前的准备今天主要所讲的内容是关于web端页面测试的,对于从事这方面的小伙伴来说,接触的应该是比较多的,对于页面测试来说,考虑的步骤、流程是很多的,还有考虑测试中的一些有效测试和无效测试,所以今天讲解的主要功能测试,主要是针对链接测试、表单测试、搜索框测试、还有删除数据这四方面,也是我们常会涉及到的地方。 分类及测试要点 功能测试 测试那些方面 一、链接测试 册数所有链接是否按指示的那样确实连接到了该链接的页面 测试所有链接的页面是否存在 测试web应用系统上没有孤立的页
-
测试开发之前端篇-Web前端简介自从九十年代初,人类创造出网页和浏览器后,Web取得了长足的发展,如今越来越多的企业级应用也选择使用Web技术来构建。前面给大家介绍网络协议时讲到,您在阅读这篇文章时,浏览器是通过HTTP/HTTPS协议向服务器发送请求、并显示了其响应内容的。本文给大家简要介绍下,网页在浏览器中展现和互动时,主要涉及到的以下几个方面的技术。希望此系列文章,对大家工作中的Web测试用例设计、自动化测试,以及网站问题定位有所帮助。HTML(HyperText Markup Language,超文本标记语言)用于描述网页的结构和内容,包涵了很多标签(tag)组成的元素(element)。如使用段落标签p,可以定义一个形如*<p>hello world</p>*的段落元素。在浏览器窗口中,按F12键打开”开发人员工具“,在名为Elements的标签中,您可以查看到整个页面的HTML代码。<html> <head> <title>网页标题</title&g
-
移动测试和Web测试的区别从本质上来说, 移动测试和Web测试都是一样的, 测试理论,测试方法都是一样的。但是移动端,比如手机和平板电脑, 也有一些需要特殊测试的地方, 阅读目录 移动测试和Web测试的简单回答相同点, 都是采用功能测试一个在Web上测试, 一个在App测试 相同点: 同样的测试的基础知识不管是传统的Web测试, 还是新兴的手机App测试, 都离不开测试的基础知识1. 相同的设计测试用例方法: 边界值,等价类,错误推导法,场景法2. 同样的测试方法, 验证业务功能是否符合预期3. 都要检查UI: 界面的布局, 风格和按钮是否简洁美观, 是否统一4. 页面的性能检测5. 应用的稳定性: 测试应用的稳定性, 不会闪退卡死等。 后台都是一样的移动测试和Web测试, 他们调用的是同样的后台, 同样的Restful API。所以首先做好后台的RestfulAPI
-
前端自动化测试(一)前端自动化测试(一) 目前开发大型应用,测试是一个非常重要的环节,但是大多数前端开发者对测试相关的知识是比较缺乏的。因为可能项目开发周期短根本没有机会写,所以你没有办法体会到前端自动化测试的重要性。 来说说为什么前端自动化测试如此重要! 先看看前端常见的问题: 修改某个模块功能时,其它模块也受影响,很难快速定位bug 多人开发代码越来越难以维护 不方便迭代,代码无法重构 代码质量差 增加自动化测试后: 我们为核心功能编写测试后可以保障项目的可靠性 强迫开发者编
web前端测试相关课程
web前端测试相关教程
- 4.4 Selenium Web 应用程序测试 Selenium 是一个用于 Web 应用程序测试的工具,它使用 JavaScript 模拟真实用户对浏览器进行操作。Selenium 支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。Selenium 支持使用 Python 语言编写动作测试脚本,测试脚本执行时,浏览器自动按照脚本代码做出点击、输入、打开、验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。用户使用 Python 编写测试脚本:测试应用程序的浏览器兼容性,验证应用程序是否能够工作在不同浏览器和操作系统之上创建回归测试检验软件功能和用户需求Selenium 主要用于测试 Web 应用程序,学习 web 自动化测试前,需要补充 Web 相关的知识,包括:HTTP 协议HTML 的基础知识,如何使用 Javascript 操纵 DOMFirebug 或者 Chrome 开发者工具的使用,用于抓取元素
- 4.3 测试 由于之前已经通过注解 @EnableCaching 开启了缓存功能,此时我们直接运行测试类进行测试,输出结果如下:使用 Redis 缓存时控制台输出内容从上图输出结果可以看出,已经成功使用了 Redis 缓存管理器。另外我们可以直接使用 Redis 客户端查看生成的缓存信息,如下图已经有名为 GoodsCache::1 的缓存键存在了。Redis 客户端查看缓存信息
- 2.7 系统测试 系统测试部分多以列表及表格为主。实例 7:# 第五章 系统测试## 5.1 功能点完成情况对照- [x] 数据库创建- [x] 后端开发- [x] 前端开发- [x] 接口联调- [ ] 日志归档## 5.2 测试结果| 功能点 | 是否测试 | 是否通过 | 备注 || ------------ | ---------------------------- | ---------------------------- | ---- || 登录 | <font color="green">√</font> | <font color="green">√</font> | 无 || 登出 | <font color="green">√</font> | <font color="red">×</font> | 无 || 增加学员信息 | <font color="red">×</font> | <font color="red">×</font> | 无 |其渲染效果如下:
- 3.5 自动化测试 自动化测试,顾名思义是指自动完成测试工作。通过工具模拟人工的操作过程,并验证其结果,这样的测试过程,就是是自动化测试。自动化测试节约了批人力成本,让机器执行大量的重复繁琐的劳动。Python 提供了众多的自动化测试框架,可以实现:单元测试:简化单元测试的编写。对 GUI 程序的自动化测试:Python 提供了模拟鼠标的单击和移动、键盘输入等功能,模拟用户操作 GUI 程序。Web 自动化测试:Python 提供了模拟鼠标的单击和移动、键盘输入等功能,模拟用户操作浏览器。性能测试:使用代码模拟大批量用户,让用户并发请求,统计系统负载能力并生成报告。
- 3.3 API 测试 我们在 Spring Boot 主函数的同级新建 service 目录,在 service 目录中新建 CuratorService 类来获取客户端实例:package cn.cdd.curatordemo.service;import org.apache.curator.RetryPolicy;import org.apache.curator.framework.CuratorFramework;import org.apache.curator.framework.CuratorFrameworkFactory;import org.apache.curator.retry.ExponentialBackoffRetry;import org.apache.curator.retry.RetryNTimes;import org.apache.curator.retry.RetryOneTime;import org.apache.curator.retry.RetryUntilElapsed;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;@Componentpublic class CuratorService { // Zookeeper 服务器地址 @Value("${curator.connectString}") private String connectString; // session 会话超时时间 @Value("${curator.sessionTimeoutMs}") private int sessionTimeoutMs; // 名称空间:在操作节点时,会以 namespace 为父节点 @Value("${curator.namespace}") private String namespace; /** * session 重连策略,使用其中一种即可 */ // RetryForever:间隔{参数1}毫秒后重连,永远重试 private RetryPolicy retryForever = new RetryForever(3000); // RetryOneTime:{参数1}毫秒后重连,只重连一次 private RetryPolicy retryOneTime = new RetryOneTime(3000); // RetryNTimes: {参数2}毫秒后重连,重连{参数1}次 private RetryPolicy retryNTimes = new RetryNTimes(3,3000); // RetryUntilElapsed:每{参数2}毫秒重连一次,总等待时间超过{参数1}毫秒后停止重连 private RetryPolicy retryUntilElapsed = new RetryUntilElapsed(10000,3000); // ExponentialBackoffRetry:可重连{参数2}次,并增加每次重连之间的睡眠时间,增加公式如下: // {参数1} * Math.max(1,random.nextInt(1 << ({参数2:maxRetries} + 1))) private RetryPolicy exponential = new ExponentialBackoffRetry(1000,3); /** * 获取 CuratorClient * 使用 Fluent 风格 * @return CuratorFramework */ public CuratorFramework getCuratorClient(){ // 使用 CuratorFrameworkFactory 来构建 CuratorFramework return CuratorFrameworkFactory.builder() // Zookeeper 服务器地址字符串 .connectString(connectString) // session 会话超时时间 .sessionTimeoutMs(sessionTimeoutMs) // 使用哪种重连策略 .retryPolicy(retryOneTime) // 配置父节点 .namespace(namespace) .build(); }}在 application.properties 配置文件中添加配置:# Zookeeper 地址curator.connectString=192.168.0.77:2181,192.168.0.88:2181,192.168.0.88:2181# 会话超时时间curator.sessionTimeoutMs=5000# 命名空间,当前客户端的父节点curator.namespace=imooc配置完成后,在 CuratorDemoApplicationTests 测试类中编写测试用例。首先我们来测试节点的创建:package cn.cdd.curatordemo;import cn.cdd.curatordemo.service.CuratorService;import org.apache.curator.framework.CuratorFramework;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;@SpringBootTestclass CuratorDemoApplicationTests { // 注入 CuratorService 依赖 @Autowired private CuratorService curatorService; @Test void contextLoads() throws Exception { // 获取客户端 CuratorFramework curatorClient = curatorService.getCuratorClient(); // 开启会话 curatorClient.start(); // 在 namespace 下创建节点 Mooc , 节点前需要加 “/” 表示命名空间下的子节点 // 节点内容为 Wiki ,使用字节数组传入 String mooc = curatorClient.create().forPath("/Mooc", "Wiki".getBytes()); // 返回 /Mooc System.out.println(mooc); curatorClient.close(); }}控制台输出当前创建的节点:/Mooc 创建完成后我们来查询命名空间下的子节点:@Testvoid contextLoads() throws Exception { // 获取客户端 CuratorFramework curatorClient = curatorService.getCuratorClient(); // 开启会话 curatorClient.start(); // 查询命名空间下的子节点 List<String> strings = curatorClient.getChildren().forPath("/"); System.out.println(strings); curatorClient.close();}控制台输出命名空间的子节点列表:[Mooc]Tips: 在我们创建客户端使用了命名空间时,API 中可用 / 表示命名空间,也表示当前客户端的根节点。获取节点数据测试:@Testvoid contextLoads() throws Exception { // 获取客户端 CuratorFramework curatorClient = curatorService.getCuratorClient(); // 开启会话 curatorClient.start(); // 获取 Mooc 节点的内容 byte[] bytes = curatorClient.getData().forPath("/Mooc"); // 输出 System.out.println(new String(bytes)); curatorClient.close();}控制台输出当前节点的内容:Wiki更新节点数据测试:@Testvoid contextLoads() throws Exception { // 获取客户端 CuratorFramework curatorClient = curatorService.getCuratorClient(); // 开启会话 curatorClient.start(); // 更新节点数据,返回当前节点状态 Stat stat = curatorClient.setData().forPath("/Mooc", "wiki".getBytes()); // 输出 System.out.println(stat); curatorClient.close();}控制台输出表示当前节点状态的数字:4294967345,4294967352,1597805299226,1597850397723,1,0,0,0,4,0,4294967345上面这串数字表示当前节点的状态 Stat,我们可以查看 Stat 类来找到对应的信息:public class Stat implements Record { // 创建节点时的事务 id private long czxid; // 修改节点时的事务 id private long mzxid; // 节点创建时的毫秒值 private long ctime; // 节点修改时的毫秒值 private long mtime; // 节点数据修改的次数 private int version; // 子节点修改的次数 private int cversion; // ACL修改的次数 private int aversion; // 如果是临时节点,该值为节点的 SessionId,其它类型的节点则为 0 private long ephemeralOwner; // 数据长度 private int dataLength; // 子节点数量 private int numChildren; // 添加和删除子节点的事务 id private long pzxid;}删除节点数据测试:@Testvoid contextLoads() throws Exception { // 获取客户端 CuratorFramework curatorClient = curatorService.getCuratorClient(); // 开启会话 curatorClient.start(); // 删除节点 curatorClient.delete().forPath("/Mooc"); curatorClient.close();}执行完成后,我们再次查询命名空间下的子节点:@Testvoid contextLoads() throws Exception { // 获取客户端 CuratorFramework curatorClient = curatorService.getCuratorClient(); // 开启会话 curatorClient.start(); // 查询命名空间下的子节点 List<String> strings = curatorClient.getChildren().forPath("/"); System.out.println(strings); curatorClient.close();}控制台输出为空,表示删除成功[]Tips: 使用 API 时,我们需要注意是否配置 namespace ,如果没有配置 namespace 的话,我们使用 API 进行操作时,path 参数需要填写全路径。如果配置了 namespace ,我们使用 API 时,Curator 会自动帮我们在 path 前加上 namespace 。
- 5. 测试 我们直接编写测试类,对数据访问接口进行测试。此处通过 @FixMethodOrder(MethodSorters.NAME_ASCENDING) 注解,使测试方法按名称顺序依次执行。这样就可以一次性测试 GoodsDao 中的所有方法了,具体测试代码如下:实例:/** * GoodsDao测试类 */@SpringBootTest@FixMethodOrder(MethodSorters.NAME_ASCENDING) // 按方法名称顺序测试class GoodsDaoTest { @Autowired private GoodsDao goodsDao; /** * 新增一个商品 */ @Test void test_01() { GoodsDo goods = new GoodsDo(); goods.setName("手机"); goods.setPic("phone.jpg"); goods.setPrice("2000"); int count = goodsDao.insert(goods); assertEquals(1, count);// count值为1则测试通过 } /** * 更新商品信息 */ @Test void test_02() { GoodsDo goods = new GoodsDo(); goods.setId(1L); goods.setName("手机"); goods.setPic("phone.jpg"); goods.setPrice("3000"); int count = goodsDao.update(goods); assertEquals(1, count);// count值为1则测试通过 } /** * 获取商品信息 */ @Test void test_03() { GoodsDo goods = goodsDao.selectOne(1L); assertNotNull(goods);// goods不为null则测试通过 } /** * 删除商品 */ @Test void test_04() { int count = goodsDao.deletex(1L);//此处应为delete(1L) assertEquals(1, count);// count值为1则测试通过 } /** * 获取商品信息列表 */ @Test void test_05() { List<GoodsDo> goodsList = goodsDao.selectAll(); assertEquals(0, goodsList.size());// goodsList.size()值为0则测试通过 }}测试结果如下,说明所有测试都通过了。JUnit 测试结果
web前端测试相关搜索
-
w3cshool
w3c标准
w3c菜鸟
w3c验证
walk
wall
warn
web
web py
web service
web services
webbrowser
webgl
webmaster
webservices
webservice教程
webservice接口
webservice调用
websocket
webview