一、Pytest介绍
Pytest是基于python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。
1.特性:
- 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
- 能够支持简单的单元测试和复杂的功能测试
- 支持参数化
- 执行测试过程中可以将某些测试跳过,或者对某些预期失败的case标记成失败
- 支持重复执行失败的case
- 支持运行由nose, unittest编写的测试case
- 具有很多第三方插件,并且可以自定义扩展
- 方便的和持续集成工具集成
2.常用拓展
- pytest-selenium(集成selenium)
- pytest-html(生成html格式的测试报告)
- pytest-rerunfailures(失败case重复执行)
- pytest-xdist(多CPU分发)
二、Pytest安装
1.在IDE中安装(这里以PyCharm为例)
2.使用命令进行安装
pip install -U pytest
pip install -U pytest-html
pip install -U pytest-rerunfailures
3.验证安装结果
三、Pytest实例
1.运行实例
运行原则:在不指定运行目录,运行文件,运行函数等参数的默认情况下,pytest会执行当前目录下的所有以test_为前缀(test_*.py)或以_test为后缀(*_test.py)的文件中以test_为前缀的函数
pytest会找当前以及递查找子文件夹下面所有的test_*.py或*_test.py的文件,把其当作测试文件
在这些文件里,pytest会收集下面的一些函数或方法,当作测试用例
不在类定义中的以test_开头的函数或方法
在以Test开头的类中(不能包含__init__方法),以test_开头的方法
①新建一个python文件:test_shili01
def func(x):
return x + 1
def test_func1():
assert func(4) == 5 # 成功示例
def test_func2():
assert func(3) == 5 # 失败示例
②运行,右键选择“Run py.test”
③运行结果:会给出成功和失败的提示,失败提示,会给出用例失败描述,包括执行失败的位置和原因,便于查找和定位
test_func2()运行失败的原因就是不符合我们设定的断言(4 == 5)
四、Pytest生成HTML测试报告
1.调用pytest.main(),来组织要执行的用例
2.通过设定参数,来指定测试报告的格式,文件名,路径(默认为测试脚本所在目录)
3.运行pytest01.py
程序会自动执行test_pytest01.py test_pytest01.py test_pytest01.py 中的测试类和测试函数
并将测试执行的结果,写入指定的测试报告中
4生成测试报告
包含成功和失败的测试用例执行结果,默认全部展示
成功用例:输出测试函数的指定输出内容
失败用例:输出异常以及错误信息
五、Pytest邮件发送测试报告
1.执行完测试用例,生成测试报告之后,可以通过邮件的方式,将测试报告发送通知相关人员
2.HTML格式的测试报告,可以作为邮件的正文放在邮件当中(可能会有部分格式的丢失)
3.测试报告,也可以作为附件的方式放在邮件中(格式不会受到影响,但是阅读不太方便)
4.python3 发送HTML内容的邮件源码
import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = 'XXX@163.com'
receiver = 'XXX@qq.com'
smtpserver = 'smtp.163.com'
username = 'XXX'
password = 'XXX'
# 邮件主题
mail_title = '主题:测试报告3'
# 读取html文件内容
f = open('report_test.html', 'rb')
mail_body = f.read()
f.close()
# 邮件内容, 格式, 编码
message = MIMEText(mail_body, 'html', 'utf-8')
message['From'] = sender
message['To'] = receiver
message['Subject'] = Header(mail_title, 'utf-8')
try:
smtp = smtplib.SMTP()
smtp.connect('smtp.163.com')
smtp.login(username, password)
smtp.sendmail(sender, receiver, message.as_string())
print("发送邮件成功!!!")
smtp.quit()
except smtplib.SMTPException:
print("发送邮件失败!!!")