lounger自动化测试框架

2779 篇文章 4 订阅
2619 篇文章 14 订阅

什么设计lounger?

我已经维护 seldom 项目多年,他是基于 unittest 、selenium 、requests 和 appium 等技术栈。每当,介绍他的一些功能的时候,总是打上 不思进取的标签, 大佬,你out了!很好,我继续选择使用pytest!为什么不使用playwright?。 虽然,我早在 2015 年就写了一系列介绍 pytest 的博客,2020年playwright刚出来的时候,我第一时间介绍 playwright 的使用,甚至下结论认为 playwright 最有可能替代 selenium的Web自动化测试库。

为啥抱着老旧了技术栈不放,这其实有一个惯性,就像新的公司和开发会选择 go,老的公司和开发依然在使用Java,他们在Java打磨多年,各种基础服务、框架和规范都很成熟,除非go语言有降为打击的能力(性能、开发效率、维护成本、生态、人员梯队等),显然,没有,那Java开发为什么必须要转go呢?

当我将seldom打磨的足够好用的时候(开箱即用),显然,没有足够的动力去用pytest + 各种库和插件(需要自己拼装)!

最近,我重新全面的学习了一遍 pytest 框架,基于 pytest 框架的特点,结合seldom的一些经验,尝试设计 lounger 框架。

为什么叫 lounger ?

首先, lounger关键字在 pypi.org 上没有被占用, 其次, 我想尽量的降低你的使用成本, 让你有更多时间偷懒摸鱼, 所有这是给 懒人用的自动化测试框架。

介绍

Next generation automated testing framework.

当然,纯粹是一个噱头,反正, 下一代就感觉更新,更牛X。

注意:这个框架目前仅用于学习,计划的许多功能还没开发,一些功能也许会调整。欢迎阅读源码。

特点

  • 支持 webapi测试。

  • 支持脚手架,命令生成测试项目。

  • 支持数据库操作。

  • 更好用的数据驱动。

架构

lounger不是一个从零开始的自动化测试框架,建立在pytest生态的基础上,提供更加简单的使用体验。

通过架构可以看到,lounger集成了主流的扩展插件, 当然,我为了将接口 自动化剥离出去,单独开发了 pytest-req插件,其实,就是希望 lounger 框架更加解耦,一些东西变得可插拔。

当然,单纯把一堆pytest插件集成到一起就自称开发了个框架,那就太不要脸了。你说对吧!?总要有点自己的东西。

  • 脚手架:通过一个命令创建自动化项目,可以节省时间。

  • 数据驱动:我曾经吐糟过 pytest 的数据驱动太狗屎了,于是,把他变得和seldom一样好用。

  • 数据库操作:支持 sqlite3、MySQL、PostgreSQL、SQL Server等数据库操作,和seldom 一样好用。

  • 自动失败截图:不需要做任何配置,基于 pytest-html用例失败时,自动截图。

  • ...

安装

正在开发中,暂不提供pip安装。

  • 安装方式一:

  1. git clone https://github.com/SeldomQA/lounger

  2. cd lounger

  3. pip install .

  • 安装方式二:

  1. pip install -U git+https://github.com/SeldomQA/lounger.git@main

其实是我的pypi.org的账号丢了,无法提交。我给官方提了issues试图找回,所以,暂时不想创建个新的账号提交。就是这样了。

此外,如果做Web自动化测试,请单独安装测试浏览器。

  1. playwright install chromium[可选]

  2. playwright install firefox[可选]

  3. playwright install webkit[可选]

  4. ...

使用

写文档需要巨大的投入,我还没写,好在我开发的每个功能都有测试用例。你可以在 tests 目录下找到这些测试用例。一看便知!

脚手架

  • 创建web自动化测试项目。

  1. lounger -pw myweb

  2. 2024-08-17 22:05:04 | INFO | cli.py | Start to create new test project: myweb

  3. 2024-08-17 22:05:04 | INFO | cli.py | CWD: D:\github\seldomQA\lounger

  4. 2024-08-17 22:05:04 | INFO | cli.py | created folder: myweb

  5. 2024-08-17 22:05:04 | INFO | cli.py | created folder: myweb\reports

  6. 2024-08-17 22:05:04 | INFO | cli.py | created file: myweb\test_web.py

  7. 2024-08-17 22:05:04 | INFO | cli.py | created file: myweb\pytest.ini

  • 创建api自动化测试项目。

  1. lounger -pa myapi

  2. 2024-08-17 22:05:31 | INFO | cli.py | Start to create new test project: myapi

  3. 2024-08-17 22:05:31 | INFO | cli.py | CWD: D:\github\seldomQA\lounger

  4. 2024-08-17 22:05:31 | INFO | cli.py | created folder: myapi

  5. 2024-08-17 22:05:31 | INFO | cli.py | created folder: myapi\reports

  6. 2024-08-17 22:05:31 | INFO | cli.py | created file: myapi\test_api.py

  7. 2024-08-17 22:05:31 | INFO | cli.py | created file: myapi\pytest.ini

  • 直接运行测试

  1. cd myweb # or myapi

  2. pytest

数据驱动

代码中的数据驱动:

  1. from lounger import data

  2. @data([2, 4, 6])

  3. def test_params(params):

  4. print("params", params)

  5. assert params % 2 == 0

  6. @data([

  7. (1, "hello"),

  8. (2, "world"),

  9. ])

  10. def test_tuple(params):

  11. print(params[0], params[1])

  12. @data([

  13. ["case1", "tom"],

  14. ["case2", "jack"],

  15. ])

  16. def test_list(params):

  17. print(params[0], params[1])

  18. @data([

  19. {"username": "admin", "password": "admin123"},

  20. {"username": "guest", "password": "guest123"},

  21. ])

  22. def test_dict(params):

  23. print(params["username"], params["password"])

支持文件数据驱动:

  1. from lounger import file_data

  2. @file_data("json_data.json", key="login")

  3. def test_json_dict(params):

  4. """

  5. used file_data test

  6. """

  7. print(params)

  8. @file_data("yaml_data.yaml", key="name")

  9. def test_yaml_list(params):

  10. """

  11. used file_data test

  12. """

  13. print(params)

  14. @file_data("yaml_data.yaml", key="login")

  15. def test_yaml_dict(params):

  16. """

  17. used file_data test

  18. """

  19. print(params)

  20. @file_data("csv_data.csv", line=2)

  21. def test_csv(params):

  22. """

  23. used file_data test

  24. """

  25. print(params)

  26. @file_data(file="excel_data.xlsx", sheet="Sheet1", line=2)

  27. def test_excel(params):

  28. """

  29. used file_data test

  30. """

  31. print(params)

用法和 seldom 不能说一样,只能说完全相同,支持 csv、excel、json、yaml 等文件格式数据,自动查找文件的位置,你都不用太关心数据文件放哪里。

Web测试

集成了 pytest-playwright 插件,已经足够好用了,lounger 暂时并没有做任何额外的事情。

  1. """

  2. run test:

  3. > pytest --browser=chromium --headed -vs test_playwright.py

  4. """

  5. import re

  6. from playwright.sync_api import Page, expect

  7. def test_has_title(page: Page):

  8. page.goto("https://cn.bing.com")

  9. # Expect a title "to contain" a substring.

  10. expect(page).to_have_title(re.compile("Bing"))

API测试

集成了 pytest-req 插件,功能都已经在 pytest-req 插件中实现,lounger 暂时并没有做任何额外的事情。

  1. """

  2. run test:

  3. > pytest -vs --base-url https://httpbin.org test_request.py

  4. """

  5. def test_put_method(put, base_url):

  6. """

  7. test put request

  8. """

  9. s = put(f'{base_url}/put', data={'key': 'value'})

  10. assert s.status_code == 200

数据操作

以下是MySQL数据操作的API,其他数据库操作类似,需要单独安装数据库驱动即可。

  1. from lounger.db_operation import MySQLDB

  2. class TestMySQL:

  3. """测试操作MySQL数据库API"""

  4. def setup_method(self) -> None:

  5. """"初始化DB连接"""

  6. self.db = MySQLDB(host="localhost", port=3306, user="root", password="123456", database="guest3")

  7. self.db.execute_sql("INSERT INTO api_user (name, age) VALUES ('test', 11) ")

  8. def teardown_method(self) -> None:

  9. self.db.delete("api_user", {"name": "test"})

  10. def test_query_sql(self):

  11. """测试查询SQL"""

  12. result = self.db.query_sql("select * from api_user")

  13. assert isinstance(result, list)

小结:

虽然,pytest相比较unittest有诸多优点,但是,在开发 lounger 的过程中仍然遇到不少问题,例如,如何将 loguru 的日志写到 pytest-html报告中;如何设计针对 Web/API 的断言。如何支持平台化。lounger(pytest) 还有很多可摸索的东西。

lounger 有很多与 seldom 相同的API,没错,有些功能是直接移植过来的。

lounger是seldom的替代品吗?目前不是,seldom已经非常成熟了,除了在多线程方面有明显的不足,其他的功能非常完善,我不会放弃seldom的开发维护。当然,我也会继续投入lounger的开发。

欢迎阅读源码,欢迎参与到 lounger 项目的开发中。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

在这里插入图片描述

 ​​​​软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值