软件测试

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 通用变成语言)

自动化测试的三个权衡

  1. 成本
  2. 速度
  3. 信心

奖杯图

  • 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)
});

Appium + Cucumber 搭建,后来因为 而放弃

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)
});

  • 特点
  1. Concepts
    将可重用的逻辑步骤组组合成一个单元的能力。允许团队快速跟踪测试场景
  2. Data-driven : 数据驱动
  3. 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 ,故尝试

  1. 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
故放弃

  1. Taiko
  • 开箱即用
  • 浏览器可用,故放弃
  1. 还是决定延用 TS + WebDriver + Appium 的方式解决

参考:BDD 框架对比: Cucumber.js vs Robot Framework vs Gauge.js

20种测试工具和框架

App 的自动化测试框架
App 的自动化测试框架
知乎回答:开源自动化测试框架

移动端原生 APP,H5 APP 和 混合 APP

周一搭框架

周二踩坑

发现 adb 连接两种异常情况

周三交流想法、周四搬砖写笔记

自动测试:自动遍历、业务建模以及数据自动对比
加分项:

  • 较少的自动化代码维护
  • 替人自动对app的每个角落进行检查分析

稳定性测试相关

尝试自动遍历工具 APP Crawler

  • 中途中断事件太多,没法自动关闭。
  • 也无法作为辅助工具来读取出可操作的控件。

在配置完之后,

java -jar appcrawler-2.4.0-jar-with-dependencies.jar --capability "appPackage=XXXX, appActivity=XXXX, dontStopAppOnReset=true"

参考: 稳定性测试方案
官方文档
相关配置
相关配置2

尝试 Espresso

录制自动化脚本方式探索

  • 手写
  • 工具录制(Appium:慢慢慢慢慢慢慢......)
  • 录制屏幕行为(得源码设置触摸监听器,放弃)

增加测试稳定性

  • 弹窗
    • 万能返回按钮(需要自行开发辅助 app,放弃)
    • 中央区域自定义点击
  • 中央区域,辅助定位的解决方案

前阿里大佬目标的自动化测试体系

岛哥的质量效能笔记

  • Macaca 面向多端的自动化测试解决方案( 2017-06-23)
  • 终端自动化测试探索之路( 2019-02-28)
  • 自动化质量评估维度( 2019-03-16)
  • 移动端UI自动化过程中的难点及应对策略( 2020-11-01)

参考:

(可能还有其它好平台,这里只需要包含 UI 测试的平台)

Appium 自动化 API

appium inspector抓取元素、录制脚本

Wfii 连接下的 Android Offline 解决方式:

  1. 设备重启
  2. 换另外一台机器连接完再断连,自己的电脑就可以连上了
  3. 断掉 Wifi 重连(不推荐)

尝试了以下方法都不行

方案1:adb kill-server    adb start-server

方案2:adb reconnect offline

这些命令来自于这两个网址,
Android ADB 设备离线,无法发出命令

adb 连接不上也有可能是 adb 版本太久问题

相关技术的相关文档

adb 连接方式官方文档

adb 命令汇总,github: awesome-adb

Appium 中文 API 文档

代码没有按预期进行

  • tsc 编译任务不通过
  • await

Macaca UI 自动化框架调研总结
Nodejs macaca
Nodejs macaca API
Nodejs macaca sample

adb 连接后设备出现 offline 情况:

  • 正在跑项目,突然电脑端拔网线等导致网络环境变化的情况。
    这个时候 电脑端的程序会报 500 错误,而且没办法重连。所以我重新运行项目后,机器之后就变 offline 了。

  • 自动化测试项目又又又又总结

  1. 权重算法用到的值
    运算符短路机制,适用于数字既表示权重又表示大小

代码解耦工具类样本
js各种规则判断