当前位置: 首页 > news >正文

使用playwright进行自动化端到端测试

项目希望能接入自动化端到端测试提高可靠性,发现微软的 playwright 还挺好用的,推荐一下,顺便说下遇到的一些难点以及最佳实践。

难点

  1. 登录
    • 项目不能帐号密码登录,只能扫二维码
      • 临时方案是先自己扫码保存 cookie 用于测试,大概几天后才过期。可以用 codegen 搭配 save-storage 命令保存 cookie

        • npx playwright codegen github.com/microsoft/playwright --save-storage=auth.json 可以保存cookie 到 auth.json,用 npx playwright --load-storage=auth.json命令即可加载,也可以在测试文件中加载在这里插入图片描述
      • 长期的方案应该是跟后台同学 py,搞个长期有效的 cookie 或者测试帐号,可以只在测试环境、内网生效,规避外网风险

  2. 支付,项目有支付环节,目前有扫二维码支付、网银支付、转账,扫码应该是比较好测试的
    • 暂时想到的方案是生成支付二维码后,截图推送给触发测试的人去扫码支付在这里插入图片描述

    • 对测试号配置一分钱测试商品方便测试

    • 如果能确保支付环节不会出错,支付是外部稳定的第三方模块,也可以考虑用免费订单跳过支付环节?

最佳实践

https://playwright.nodejs.cn/docs/best-practices

测试理念

  • 测试用户能看到的,不要依赖实现细节
  • 测试尽可能隔离
  • 避免测试第三方依赖
  • 有数据库相关的要考虑数据变化是否影响测试
  • 视觉回归测试要考虑操作系统和浏览器版本

tips

  • 使用定位器的时候
    • 支持链式,使用过滤搜索小范围
    • 优先用面向用户的属性,而不是 css 选择器
    • 用能够适应 dom 变化的定位器,比如ARIA role、 ARIA 参数和可访问的名称page.getByRole('tab', { name: '其它' })
    • 可以用codegen 功能来生成定位器,如npx playwright codegen github.com/microsoft/playwright,他会帮你找到最适合的定位器(太好用了!)
  • 使用web first断言(assertions),playwright 会等待,直到条件达成
    • 比如发了个取消请求,语气能看到取消成功的提示,可以这样写 await expect(page.getByText('取消成功')).toBeVisible(),toBeVisible()这种断言会等待和重试
    • await要写在 expect 前面,如果像expect(await page.getByText('welcome').isVisible()).toBe(true);这样,会立即检查定位器能否找到并返回结果,不会去等待重试
  • 调试
    • 安装 VSCode 插件调试
    • trace viewer 能看截图,能看时间线
    • test 加 ui 命令能可视化测试过程
  • 在配置里可以很方便的测多几种浏览器
  • 及时更新 playwright 依赖
  • CI 中跑测试
  • 测试文件接入 lint
  • 并行跑测试,playwright 对于一个文件的测试是按顺序跑的,可同时跑多个文件,如果对单个文件也想并行跑,可以这样写
  • 用 soft 断言,可以不终止测试expect.soft

其他

无障碍访问

Web 无障碍访问 (也称为 a11y) 是指创建可供任何人使用的网站的做法——无论是身患某种障碍、通过慢速的网络连接访问、使用老旧或损坏的硬件,还是仅处于某种不方便的环境。例如,在视频中添加字幕可以帮助失聪、有听力障碍或身处嘈杂环境而听不到手机的用户。同样地,确保文字样式没有处于太低的对比度,可以对低视力用户和在明亮的强光下使用手机的用户都有所帮助。
ARIA roles

http://www.lryc.cn/news/299999.html

相关文章:

  • ES实战-相关性搜索
  • MQTT的学习与应用
  • 编译原理实验1——词法分析(python实现)
  • C语言——oj刷题——模拟实现库函数strlen
  • 对进程与线程的理解
  • 「数据结构」线性表
  • GEE:关于在GEE平台上进行回归计算的若干问题
  • Vivado -RAM
  • 备战蓝桥杯---图论之最短路dijkstra算法
  • C#系列-C#实现秒杀功能(14)
  • Java ‘Elasticsearch‘ 操作
  • 【AI视野·今日NLP 自然语言处理论文速览 第七十八期】Wed, 17 Jan 2024
  • 实验5-4 使用函数计算两点间的距离
  • 【JavaEE】_JavaScript(Web API)
  • ARM交叉编译搭建SSH
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • 回归预测模型:MATLAB多项式回归
  • 「计算机网络」数据链路层
  • 【Linux】Ubuntu 22.04 升级 nodejs 到 v18
  • 当go get获取不到软件包时
  • 全网最详细解法|同济大学|高等数学|第八版|习题1-5
  • 可视化工具:将多种数据格式转化为交互式图形展示的利器
  • [嵌入式AI从0开始到入土]14_orangepi_aipro小修补含yolov7多线程案例
  • 机器学习、深度学习、强化学习、迁移学习的关联与区别
  • 苹果为什么需要台积电3nm工艺芯片?
  • 力扣:53. 最大子数组和
  • 幻兽帕鲁Palworld专用服务器CPU内存配置怎么选择?
  • 学习总结11
  • Hadoop运行环境搭建
  • CTFshow web(php命令执行59-67)