软件测试
2021-09-26 207
测试相关汇总
https://gitee.com/seagull1985/LuckyFrameWeb
https://gitee.com/seagull1985/LuckyFrameClient
https://www.jianshu.com/p/abe42743450a
概念
-
UI 测试:UI 的功能测试。确保屏幕上的所有按钮,字段,标签和其他元素按照规范中的假定工作。
-
GUI 测试:功能测试+验收测试。确保屏幕上的所有元素都像规范中提到的那样工作,并且还要确保颜色,字体,元素大小和其他类似的东西匹配设计。
-
功能测试:产品的质量保证过程,根据规范要求,假定一般测试组件或系统的功能/功能。
-
E2E测试:它需要识别系统依赖性并确保正确的信息通过多个组件和系统传递。
-
DSL(BDD 里面的 Domain Specific Language 领域特定语言),与 GPL( General Purpose Language 通用变成语言)
自动化测试的三个权衡
- 成本
- 速度
- 信心
- 70% 单元测试,20%接口测试, 10 % UI 测试
设计思想
数据分离
存到 csv
DRY DAME 结合
POM 设计模式
- driver 层
- page 层
- case 层
case 层搭积木
测试框架 完整性
测试技术 / 框架
技术框架
基于两个低层库,selenium 和 WebDriver
selenium 系列
1. selenium [səˈliːniəm]
2. Selendroid
selenium 的移动应用版本。
3. cypress
- 开箱即用
- 浏览器
BBD 框架
Jasmine [ˈdʒæzmɪn]: 是一个 BDD 的测试框架,不依赖任何 JS 框架以及 dom,是一个非常干净以及友好 API 的测试库.
测试运行器
Appium:移动端常用
Karma([ˈkɑːmə]):浏览器用。是一个基于Node.js的JavaScript测试执行过程管理工具,这个测试工具的一个强大特性就是,它可以监控(Watch)文件的变化,然后自行执行,通过console.log显示测试结果。
测试方式
单元测试
E2E测试
BDD
Cucumber
defineSupportCode(function({Given, When, Then}) {
Given('当我在网站的首页', function() {
return this.driver.get('http://0.0.0.0:7272/');
});
When('输入用户名 {string}', function (text) {
return this.driver.findElement(By.id('username_field')).sendKeys(text)
});
Robot Framework
Selendroid
Gauge
- 实例
step("当我在网站的首页", async function () {
await page.goto('http://0.0.0.0:7272/');
});
step("输入用户名 <query>", async function (query) {
await page.click('#username_field');
await page.type(query)
});
- 特点
- Concepts
将可重用的逻辑步骤组组合成一个单元的能力。允许团队快速跟踪测试场景 - Data-driven : 数据驱动
- Environments : 环境变量
自动化测试
自动化测试必要性
人工测试代价大
需要做自动测试的工程一般都具有一定的规模。当整个系统复杂度较高的时候,如何发现一个小的改动把已经正常的功能又弄坏了?
方便代码重构
维护时,防止修改 A 模块破坏了 B 模块
#Angular 测试相关
分类
分为单元测试和端到端测试
TDD( Test-driven development 测试驱动开发):每一行代码都可测
BDD( Behavior-Driven Development行为驱动开发 ):帮助设计软件
概念
关键词:合作
Executable Specifications
Angular 的测试库 Protractor [prəˈtræktə(r)] 特点
- 不需要基于id,css选择器,xpath等查询元素,你可以基于绑定,模型,迭代器等等进行测试
其中的 Jasmine 可以接受promises。因此,我们可以用下面的代码进行上面的测试来检查标题:
driver.getTitle().then(function(title){ expect(title).toBe('Baidu'); });
可以重构为:
expect(driver.getTitle()).then('Baidu');
测试框架:
-
Karma
-
Jasmine
-
Selenium

一开始以为是 WebDriver
搜到 Selenium 重复使用打开 -> 重写Remote / 复用 session -> 官网寻找sessionId 在哪返回和怎样通过 sessionId 重连,attach() 方法 -> attach() 配置项 , 然后发现这么一句话
If you’re running web or native tests on mobile devices, capabilities differs from the WebDriver protocol. See the Appium Docs for more details
后来才知道是 Appium 接管的
一下子就找到了解决方法
session 在 appium 里面是怎么走的
需求
- 测试逻辑部分:无框架或BDD
- 技术实现部分: 移动端混合 APP
周末尝试
一开始 Appium&Cucumber搭建UI自动化测试框架,了解到 cucumber 是用 js
后来看到 ThoughtWorks 技术选型 Gauge + Taiko ,故尝试
- BDD 框架:Gauge
- IDE 部分:VScode,IDEA
- 插件兼容部分:对 Java、Python 好,TS 的一年前更新 0.1 版本
PS:装不上还得自己下载完
gauge install ts --file plugins/mac/gauge-ts-0.1.0.zip -l debug
故放弃
- Taiko
- 开箱即用
- 浏览器可用,故放弃
- 还是决定延用 TS + WebDriver + Appium 的方式解决
参考:BDD 框架对比: Cucumber.js vs Robot Framework vs Gauge.js
App 的自动化测试框架
App 的自动化测试框架
知乎回答:开源自动化测试框架
周一搭框架
周二踩坑
发现 adb 连接两种异常情况
周三交流想法、周四搬砖写笔记
- 较少的自动化代码维护
- 替人自动对app的每个角落进行检查分析
稳定性测试相关
尝试自动遍历工具 APP Crawler
- 中途中断事件太多,没法自动关闭。
- 也无法作为辅助工具来读取出可操作的控件。
在配置完之后,
java -jar appcrawler-2.4.0-jar-with-dependencies.jar --capability "appPackage=XXXX, appActivity=XXXX, dontStopAppOnReset=true"
尝试 Espresso
- 得 Android 内部编写测试代码,放弃
如何学习 Espresso
录制自动化脚本方式探索
- 手写
- 工具录制(Appium:慢慢慢慢慢慢慢......)
- 录制屏幕行为(得源码设置触摸监听器,放弃)
增加测试稳定性
- 弹窗
- 万能返回按钮(需要自行开发辅助 app,放弃)
- 中央区域自定义点击
- 中央区域,辅助定位的解决方案
前阿里大佬目标的自动化测试体系
岛哥的质量效能笔记
- Macaca 面向多端的自动化测试解决方案( 2017-06-23)
- 终端自动化测试探索之路( 2019-02-28)
- 自动化质量评估维度( 2019-03-16)
- 移动端UI自动化过程中的难点及应对策略( 2020-11-01)
参考:
(可能还有其它好平台,这里只需要包含 UI 测试的平台)
- 公司产品级别
腾讯自动测试化平台 - 开源级别
LuckyFrame测试平台,Spring + Vue
NG-Nest,Angular + Nestjs,已尝试部署成功 - 书本知识
高效自动化测试平台
Appium 自动化 API
Wfii 连接下的 Android Offline 解决方式:
- 设备重启
- 换另外一台机器连接完再断连,自己的电脑就可以连上了
- 断掉 Wifi 重连(不推荐)
尝试了以下方法都不行
方案1:adb kill-server adb start-server
方案2:adb reconnect offline
这些命令来自于这两个网址,
Android ADB 设备离线,无法发出命令
相关技术的相关文档
代码没有按预期进行
- tsc 编译任务不通过
- await
Macaca UI 自动化框架调研总结
Nodejs macaca
Nodejs macaca API
Nodejs macaca sample
adb 连接后设备出现 offline 情况:
-
正在跑项目,突然电脑端拔网线等导致网络环境变化的情况。
这个时候 电脑端的程序会报 500 错误,而且没办法重连。所以我重新运行项目后,机器之后就变 offline 了。 -
自动化测试项目又又又又总结
- 权重算法用到的值
运算符短路机制,适用于数字既表示权重又表示大小
代码解耦工具类样本
js各种规则判断