经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
微软出品自动化神器【Playwright+Java】系列(十二)测试框架的设计与开发
来源:cnblogs  作者:久曲健  时间:2023/3/15 8:53:53  对本文有异议

一、前言

大家好,我是六哥!

又有好长一段时间没更文了,不是我懒,而是确实在更文上,没有以前积极了,这里是该自我检讨的。

其实不是我不积极,而是相对更文学习来说,优先级不是最高。

对我而言,目前最重要的就是减肥,除了下雨下雪,我都坚持每天5公里,keep记录如下:

a2c209a37f012f95d8d51a99f3fc069.jpg

早在四天前就完成了playwright的框架开发,因为一些事要处理就把文章的事搁置了。

下面将为大家分享关于playwright的自动化测试框架的设计与实现,这里仅分享思路,感兴趣的同学请自行尝试!

二、如何实现

1、框架要素

延续了所有框架的通用要素:

  • 日志&测试步骤
  • 报告&失败截图
  • 配置文件&数据源设计
  • 公共函数&API封装
  • 测试数据&参数化、解耦
  • 测试套件&测试用例设计、组装

2、日志

日志可以很好辅助我们定位问题,这里我使用的是log4j,简单配置即可使用,测试代码如下:

  1. package com.playwrght.frame.log;
  2. import org.apache.log4j.Logger;
  3. import org.testng.annotations.Test;
  4. public class TestLog {
  5. /**
  6. * log4j日志
  7. */
  8. private static Logger logger = Logger.getLogger(TestLog.class);
  9. @Test
  10. public void testLog() {
  11. logger.info("this is info log!!");
  12. logger.error("this is error log!!");
  13. }
  14. }

3、浏览器的封装

playwrght就三个浏览器,相对也比较简单,这里直接贴图了,如下:

image.png

4、基础层

这里主要用于处理,元素对象和原生API的封装,示例如下图:

image.png
我只写了点击和输入的,其他的没写,感兴趣的同学请自己尝试。

5、测试用例

就是调用封装好的API,示例代码如下:

  1. package com.playwrght.frame.testcase;
  2. import com.playwrght.frame.page.BasePage;
  3. import com.playwrght.frame.report.TestFailListener;
  4. import io.qameta.allure.*;
  5. import org.testng.Assert;
  6. import org.testng.annotations.*;
  7. @Epic("登录功能测试")
  8. @Feature("登录功能")
  9. @Listeners(TestFailListener.class)
  10. public class TestLogin extends BasePage {
  11. BasePage basePage;
  12. @BeforeClass
  13. public void beforeClass() {
  14. basePage = new BasePage();
  15. }
  16. //用例编号
  17. @TmsLink("562")
  18. //bug编号
  19. @Issue("4042")
  20. //bug严重等级,优先级,包含blocker, critical, normal, minor, trivial 几个不同的等级
  21. @Severity(SeverityLevel.TRIVIAL)
  22. //用例描述
  23. @Description("测试一个流程,用作回归冒烟测试")
  24. /**
  25. *功能块,具有相同feature或astory的用例将规整到相同模块下,执行时可用于筛选
  26. */
  27. @Story("登录模块-登录功能")
  28. @Test(description = "验证登录功能", dataProvider = "loginData")
  29. public void testDemo(String userName,String passWord,String msg) throws Exception {
  30. basePage.open();
  31. basePage.fill("用户名",userName);
  32. basePage.fill("密码",passWord);
  33. basePage.click("登录按钮");
  34. String content = basePage.getTextContent("错误提示");
  35. Assert.assertEquals(content,msg);
  36. }
  37. @AfterClass
  38. public void afterClass() {
  39. basePage.quite();
  40. }
  41. @DataProvider(name = "loginData")
  42. public Object[][] loginData() {
  43. return new Object[][]{
  44. {"user1","1","用户名或密码错误"},
  45. {"user2","2","用户名或密码错误"},
  46. {"user3","3","error!"},
  47. };
  48. }
  49. }

6、测试报告

因徒弟说playwight+python+飞书很秀,我一看报告就是allure,好看是真的。

就一个配置出来的东西,没什么,就那么回事吧,也不难,所以不熟悉的同学,看看官方文档就能很快上手!

加了监听,即可实现运行失败截图,如下面代码:

  1. package com.playwrght.frame.report;
  2. import io.qameta.allure.Attachment;
  3. import org.testng.ITestResult;
  4. import org.testng.TestListenerAdapter;
  5. import static com.playwrght.frame.page.BasePage.page;
  6. public class TestFailListener extends TestListenerAdapter {
  7. @Override
  8. public void onTestFailure(ITestResult result) {
  9. screenshot();
  10. }
  11. @Attachment(value = "screen shot",type = "image/png")
  12. public byte[] screenshot(){
  13. byte[] buffer = page.screenshot();
  14. return buffer;
  15. }
  16. }

说明:这里我没用Jenkins驱动生成报告,没必要,全在maven中完成了!

测试报告效果如下

image.png

运行失败截图

image.png

持续集成我就不写了,百度一搜一大把,真的超级简单,可自行尝试!

三、最后

写到这里,关于Playwright系列教程的文章就基本完结了!

总体感觉比Selenium写框架简单多了,至于为什么,懂得人自然也懂,这里就不分享了,感兴趣的同学可以自行尝试,也可以通过公号找到我进行交流!

我是六哥,爱减肥的六哥,后面还会为大家分享更多技术文章,还请继续关注我!

原文链接:https://www.cnblogs.com/longronglang/p/17216329.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号