测试开发全栈之Python自动化 Pytest 自动化测试 - 简易入门教程(03)

程序员一凡 · 2021年04月29日 · 1965 次阅读

今天分享内容的重点,和大家来讲一下我们的测试框架——Pytest

讲到这个框架的话呢,可能有伙伴就会问老师,我在学习自动化测试过程中,我们要去学一些什么东西?

第一个肯定要学会的是一门编程语言,比如说 Python 或者 Java,至少你要会一个

第二个,你去进行 WebUI 自动化或者接口自动化,一些成熟的框架,比如说用来做 Web 自动化有 Selenium,App 自动化有 Appium、uiautomator2,接口自动化框架就非常的多,requests、httprunner,这个只是说是框架,不是指工具,如果说你要指工具的话,还有很多,比如进行 Web 自动化的工具,QTP、Airtest、RF 这一些都是工具,RF 你其实也可以理解它为一个开源的框架。

编程语言:

  • python/java

成熟的框架:

  • web 自动化: selenium RF
  • app 自动化:appium uiautomator2 RF
  • 接口自动化:requests httprunner

除了这一些之外,我们要去搭建一套框架,我相信大家肯定还听过这两个东西,哎~老师,不是还有一个叫做 Unittest 以及我们这个 Pytest,我们讲到 Unittest 以及 Pytest 到底和我们前面的框架有什么区别呢?

这就和大家来讲一讲。

一听到框架这个东西,两类都叫做框架,区别在哪?

Unittest 以及 Pytest 我们把它们叫做单元测试框架,这一类框架运用场景有两个,场景一用来做单元测试(对代码最小的集合进行测试比如说小到测试函数的功能是否实现,类的功能是否实现),做单元测试其实要针对不同的语言有不同的框架,比如说在单元测试比较成熟这种框架 Xunit 系列框架,比如说去写的网站是用 Java 来设计的,我要去测试就要用到 Junit 这个框架,或者你也可以用 testng 框架,是针对 Java 比较成熟的两个框架。比如说去写的网站是用 Python 来设计的我们用的就是 Unittest 以及 Pytest。

单元测试框架:

场景一:用来做单元测试 对代码最小的集合进行测试(函数、类)

  • xunit 系列框架

  • java ==》junit / testng

  • python ==》unittest / pytest

上面是它的第一个场景,我们在讲自动化的时候,我们很少会去用场景一,单元测试这个事情本来它是由测试工程师来做的,但是它对测试工程师要求比较苛刻,需要精通熟练一门编程语言,才能够把单元测试做得很好。基本上单元测试不会有专门的测试工程师去做,公司中大部分都是由开发进行一个交叉的测试。

场景二:自动化的用例的管理
unittest / pytest + selenium / appium/requests

场景二用就可以结合我们的成熟的框架来做自动化测试,用例的管理,昨天的时候就有跟大家讲到 POM 的一个分层,为什么要用到分层思想来进行设计呢,其实目的就是因为我们在进行自动化测试的过程中间,也是对于我们自动化用例去进行一个覆盖以及实现,在过程中间会有很多重复性的东西,我们就给它抽出来。

我们讲 POM 的时候,我们其实就是结合了 unittest 来设计的用例,并且运行。

只是说咱们没有去生成 Html 报告,其实真正的你要去进行完整的过程,除了以这种模式来设计用例之外,还要去执行用例还要有报告的生成。(昨天有讲 Unittest 设计用例的基本规则,需要视频教程的可以公众号主页点击领取资料)

今天就给大家来讲一下,Pytest 框架是如何来管理用例,和 Unittest 又有什么区别?它有什么样的优势?

Pytest 框架概述

  • pytest 是一个非常成熟的 python 的单元测试框架,比 unittest 更灵活,功能更强大。
  • pytest 可以和 selenium、appium、requests 等结合实现 web 自动化、接口自动化、app 自动化
  • pytest 可以实现测试用例的跳过以及 reruns 失败用例重试
  • pytest 可以和 allure 生成非常美观的测试报告
  • pytest 可以和 jenkins 持续集成
  • pytest 有很多非常强大的插件,并且这些插件能够实现很多实用的操作

Pytest 插件

Pytest 具有很多第三方插件,并且可以自定义扩展,常用的有:

pytest
pytest-xdist:测试用例分布式执行,多 cpu 分发
pytest-ordering:用于改变测试用例的执行顺序
pytest-rerunfailures:用例失败后重跑
pytest-html:生成 html 格式的自动化测试报告
allure-pytest:生成美观的 allure 测试报告

pytest 识别用例默认规则

1.模块名(文件名) 必须以 test_开头或者以_test 结尾
2.测试类必须以 Test 开头,并且不能有 init 方法
3.测试方法必须以 test 开头

pytest 配置文件

pytest.ini 这个文件他是 pytest 单元测试框架的核心配置文件

1.位置: pytest.ini 一般放在项目的根目录下
2.编码:必须是 ANSI,可以使用 Notepad++ 修改编码格式。有中文的时候一定要注意转码,否则会报错
3. 作用:改变 pytest 默认的执行方式
4.运行规则:主函数和命令行的执行方式,都会默认读取 pytest.ini 的配置文件

参数详解

-s:输出调试信息,包括 print 打印信息
-v:显示更详细的信息
-vs:两个参数一起用,输出详细的调试信息
-n:支持多线程或者分布式运行测试用例

  • pytest test_login.py -vs -n 2

--reruns NUM:失败用例重跑次数
--maxfail=2:出现 2 个用例失败就停止
--html=./report/res.html:指定在目录生成一个测试报告
pytest test_login.py --html=./report/res.html

Allure 环境部署
下载、安装、配置 Allure

下载地址: https://github.com/allure-framework/allure2/releases

安装:解压即可
配置:环境变量--path--allure 安装目录/bin

验证:

  • dos 命令行: allure --version
  • pycharm terminal:allure --version
  • 问题:dos 验证 Ok,pycharm 验证失败怎么解决?重启 pycharm

Allure 报告指令

1.添加配置,生成 json 格式的临时报告

  • 主函数: pytest.main(['--alluredir ,'./temp'])
  • 配置文件: addopts = --alluredir./temp

2.将 json 格式的临时报告转换为 allure 报告
pytest.main(['--alluredir' ;'./temp'])
os.system('allure generate ./temp -o ./report --clean')

冒烟测试

pytest.ini 中添加 markers = smoke:冒烟测试
在函数上加上 mark 标记来指定进行冒烟测试的用例:@pytest.mark.smoke
命令行执行:pytest -m smoke
主函数执行: pytest.ini 添加-m smoke,再执行主函数即可

1、点赞。防止以后找不到,想看的时候,在自己主页就能找到了,很方便;
2、关注我。让我们成为长期关系,下一个视频会分享更多的硬核干货;
3、本文章学习资源,均可以免费分享。

微信公众号:程序员一凡。这样的好内容,里面还有近百篇。 谢谢你的支持!

你看到优质的文章点赞,表面上是为了让作者开心,实际上可以让大数据和人工智能给你推荐更多优质的干货内容~

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册