pytest2

参数化fixture
参数化fixture允许我们向fixture提供参数,参数可以是list,该list中有几条数据,fixture就会运行几次,相应的测试用例也会运行几次。
参数化fixture的语法是
@pytest.fixture(params=[“smtp.gmail.com”, “mail.python.org”])

其中len(params)的值就是用例执行的次数
在fixture的定义中,可以使用request.param来获取每次传入的参数

@pytest.mark.parametrize 装饰器可以让我们每次参数化fixture的时候传入多个项目。回忆上一节,我们参数化的时候只能传入传入1个字符串或者是其他的数据对象,parametrize每次多个参数,更加灵活。
例子
import pytest
@pytest.mark.parametrize(“test_input,expected”, [
(“3+5”, 8),
(“2+4”, 6),
(“6*9”, 42),
])
def test_eval(test_input, expected):
assert eval(test_input) == expected

test_eval方法中传入了2个参数,就如同@pytest.mark.parametrize装饰器中定义的那样,因此简单理解,我们可以把parametrize装饰器想象成是数据表格,有表头(test_input,expected)以及具体的数据。

使用fixture参数化接口入参

生成junit格式的xml报告
pytest可以生成junit格式的xml报告,在命令行中加入–junit-xml=path 参数就可以了。
pytest test_quick_start.py --junit-xml=report.xml

------------------SDK接口测试
综上:接口可以理解成是不同系统或模块之间资源交流方式;
为什么做接口测试?
接口中大部分的内容是数据,通过数据的对比我们能推测到系统和产品的逻辑,测接口就是测逻辑。
最后接口中的返回相对单纯,不像web页面,html代码中有太多ui的东西,ui最不稳定,变化太快,接口相对稳定一点点,但是里面的干扰信息更少,断言相对容易很多。
postman: 推荐。基本功能免费。最简单的基于http接口的调试和测试工具;
jmeter:后置处理器配合断言基本上可以满足接口测试需求,就是测试报告要做二次开发
自己撸代码:推荐。配合类似xunit测试框架,基本可以满足一切需求;零基础实现python接口自动化视频教程,一起撸代码吧
paw: 强力推荐。mac上最强,淘宝买个授权好像就百把块钱;
postman:在这里插入图片描述

我们可以把json字符串转成python语言的dict
res = json.loads(json_str)
print(res[‘id’]) # 90
我理解的话,json就是一种通用的信息传递规则,就类似于RMB一样,在中国你可使用,在美国你要把它换成dollars,在英国使用,就要把它换成英镑

总之对于接口的自动化测试用例说来,遵循3A原则就意味着
Arrange: 测试用例执行之前需要准备测试数据,包括需要输入的数据及存量数据
Act: 通过不同的参数来调用接口,并拿到返回
Assert: 必须做断言,否则用例就没有任何意义了


导入unittest库,不导入就没办法使用,好比手机如果要使用某个app就必须先安装该app一样,是套路,记住就好。

class StringTestCase(unittest.TestCase):

定义测试类,初学者看到这一行就害怕,其实大可不必。这还是套路,测试类的名字你可以随意取,当然了首字母最好大写,这样更符合规范一些。所有的测试类都必须直接或间接的继承自unittest.TestCase类。总之,这还是套路,记住就好。

def setUp(self):
# Arrange
self.test_string = “This is a string”

继续套路。setUp(self)方法是一个钩子方法,在每个测试用例执行之前都会执行一次,是做数据初始化的好地方。
在上面的例子里,我们为每一个测试方法都定义了被测对象,self.test_string

def testUpper(self):
# Act and Assert
self.assertEqual(“THIS IS A STRING”, self.test_string.upper())

套路继续。这里定义了一个名为testUpper的测试方法,这个方法就是一个测试用例。
注意,只有方法名以test开头的方法才是测试用例
self.assertEqual是一个断言方法,作用是如果第一个参数跟第二个参数相等,那么用例通过,否则用例失败,并在测试报告中打印出错误原因。上面的例子里,我们判断self.test_string.upper()方法会将"This is a string"字符串转换成"THIS IS A STRING"
导入unittest
定义继承自unittest.TestCase的测试类
定义以test开头的测试方法,这个方法就是测试用例,你可以在一个类里定义n个测试用例
断言
unittest.main()是执行测试用例最简单的方式

pytest支持以xUnit格式型的测试模型(setup/teardown),但还与python自带的unittest还是有一点差别,如下
模块形式----使用setup_module/teardown_module  
函数形式----使用setup_function/teardown_function
类形式----使用setup_class/teardown_class
方法形式—使用setup_method/teardown_method

各顺序如下
setup_module()----->setup_function()----->test_1----->teardown_function()----->setup_function()----->test_2—>teardown_function()---->teardown_module()
setup_module()和teardown_module只会在开始测试及测试结束时各运行一次
而setup_function()和teardwon_function会在每个用例开始前及结束后各运行一次

setup_class()—>setup_method()---->test_3()---->teardown_method()—>setup_mothod()–>test_4()---->teardown_method()---->teardonw_class()
setup_class和teardown_class只会在类调用前及结束后各运行一次
setup_method和teardown_method会在每个用例时都会运行
以类形式运行时,类里的用例执行顺序是不会变的,这点比unittest好

fixture scope的范围参数
之前使用@pytest.fixture(scope=‘module’)来定义框架,scope的参数有以下几种
 function   每一个用例都执行
class        每个类执行
module     每个模块执行(函数形式的用例)
session     每个session只运行一次,在自动化测试时,登录步骤可以使用该session
 失败重试
使用的插件是pytest-rerunfailures,官网这里
使用方法:
在测试时加入–rerun参数
py.test --rerun 2

用例失败再重测2次

addCleanup:
场景是这样的:正常的测试用例是这样的,你创建资源后,需要在用例中去进行删除资源,或者要在tearDown中进行资源清理,相当不方便,用addCleanup后,直接在用例中写入函数,在tearDown用例后,会再次调用addCleanup来删除资源,减少代码量及遗漏删除

3.多进程运行cases
  当cases量很多时,运行时间也会变的很长,如果想缩短脚本运行的时长,就可以用多进程来运行。
安装pytest-xdist:
pip install -U pytest-xdist

运行模式:
pytest test_se.py -n NUM

其中NUM填写并发的进程数。

用Pytest+Allure生成漂亮的HTML图形化测试报告

Pytest允许你在名为test _ * .py的任何文件中定义测试,并将其作为以test_ *开头的函数。然后Pytest将在整个项目中找到所有测试,并在你的控制台中运行pytest时,自动运行它们。
Pytest接受可以在testrunner停止时更改的标志和参数,它如何输出结果,运行哪些测试以及输出中包含哪些信息。它还包括一个可以输入到测试中的set_trace()函数;这将暂停你的测试,并允许你与变量交互,在控制台中灵活调试你的项目。
分享8个流行的pytest插件!

云智时代
763文章 115万总阅读
查看TA的文章>
0
分享到

Python测试框架pytest的八个强大插件
2018-07-05 18:29
因为Python的强大生态系统,流行的Python测试工具有因而受益。pytest就是其中之一,在其周边的插件也非常丰富。pytest框架可以轻松编写小型测试,然后进行扩展以支持应用程序和库的复杂功能测试。

Pytest允许你在名为test _ * .py的任何文件中定义测试,并将其作为以test_ *开头的函数。然后Pytest将在整个项目中找到所有测试,并在你的控制台中运行pytest时,自动运行它们。
Pytest接受可以在testrunner停止时更改的标志和参数,它如何输出结果,运行哪些测试以及输出中包含哪些信息。它还包括一个可以输入到测试中的set_trace()函数;这将暂停你的测试,并允许你与变量交互,在控制台中灵活调试你的项目。
pytest因其强大的插件生态系统而得名。因为pytest是一个非常流行的测试库,所以多年来创建了许多插件来扩展,定制和增强其功能。这里分享8个流行的pytest插件!
1.pytest-sugar
pytest-sugar改变了pytest的默认外观,增加了一个进度条,并立即显示失败的测试。它不需要配置,只需点击安装pytest-sugar,用pytest运行你的测试,可获得更漂亮,更有用的输出。
2.pytest-cov
pytest-cov增加了对pytest的覆盖支持,以显示哪些代码行已经测试,哪些没有。它还将包括项目的测试覆盖率。
3.pytest-picked
pytest-picked运行基于你已修改但尚未提交给git的代码的测试。安装库并使用pytest-picked运行测试,以仅测试自上次提交以来已更改的文件。
4.pytest-instafail
pytest-instafail修改pytest的默认行为,以立即显示失败和错误,而不是等到pytest完成每个测试运行。
5.pytest-tldr
一个全新的pytest插件,可以将输出限制为你需要的东西。pytest-tldr(tldr代表“太长,未读”),就像pytest-sugar一样,除基本安装外不需要配置。pytest-tldr默认将输出限制为仅用于失败测试的回溯,而忽略了一些令人讨厌的颜色编码,而不是pytest的默认输出,这非常详细。添加-v标志会为喜欢它的人返回更详细的输出。
6.pytest-xdist
pytest-xdist允许你通过-n标志并行运行多个测试:例如,pytest -n 2将在两个CPU上运行测试。这可以显著加快测试速度。它还包括–looponfail标志,它将自动重新运行你的失败测试。
7.pytest-django
pytest-django为Django应用程序和项目添加了pytest支持。具体来说,pytest-django引入了使用pytest fixture测试Django项目的能力,省略了导入unittest和复制/粘贴其他样板测试代码的需要,并且比标准的Django测试套件运行得更快。
8.django-test-plus
django-test-plus不是特定于pytest,但它现在支持pytest。它包含你自己的测试可以继承的TestCase类,并使你能够使用更少的击键来键入频繁的测试用例,例如检查特定的HTTP错误代码。在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值