pytest

Pytest 使用简介

匿名 (未验证) 提交于 2019-12-03 00:11:01
前言   最近在听极客时间的课程,里面的讲师极力推崇 pytest 框架,鄙视 unittest 框架,哈哈!然后查了些资料,发现了一条 python 鄙视链: pytest 鄙视 > unittest 鄙视 > robotframework 。   pytest 是 python 的第三方单元测试框架,比自带 unittest 更简洁和高效,支持315种以上的插件,同时兼容 unittest 框架。这就使得我们在 unittest 框架迁移到 pytest 框架的时候不需要重写代码。接下来我们在文中来对分析下 pytest 有哪些简洁、高效的用法。 一、安装 首先使用 pip 安装 pytest pip3 install pytest 查看 pytest 是否安装成功 pip3 show pytest 二、简单使用 1.创建 test_sample.py 文件,代码如下: #!/usr/bin/env python # coding=utf-8 import pytest def inc ( x ): return x + 1 def test_answer (): assert inc ( 3 ) == 5 if __name__ == "__main__" : pytest . main () 执行结果: test_sample . py F [ 100 %] =======

多线程并行与分布式执行

匿名 (未验证) 提交于 2019-12-03 00:11:01
场景:测试用例1000条,一个用例执行1钟,一个测试人员执行需要1000分 钟。通常我们会用人力成本换取时间成本,加几个人一起执行,时间就会缩 短。如果10人一起执行只需要100分钟,这就是一种并行测试,分布式场景。 解决:pytest分布式执行插件:pytest-xdist,多个CPU或主机执行 前提:用例之间都是独立的,没有先后顺序,随机都能执行,可重复运行不 影响其他用例。 安装:Pip3 install pytest-xdist 来源:博客园 作者: barton123 链接:https://www.cnblogs.com/QaStudy/p/11567166.html

pytest-参数化2

匿名 (未验证) 提交于 2019-12-03 00:11:01
import pytesttest_user_data=['linda','sai','tom']@pytest.fixture(scope='module')def login(request): user=request.param print('打开首页登陆%s'%user) return user#indirect=True是把login当作函数去执行@pytest.mark.parametrize('login',test_user_data,indirect=True)def test_cart(login): usera=login print('不同用户添加购物车%s'%usera) assert usera!='' Process finished with exit code 0 打开首页登陆linda PASSED [ 33%]不同用户添加购物车linda 打开首页登陆sai PASSED [ 66%]不同用户添加购物车sai 打开首页登陆tom PASSED [100%]不同用户添加购物车tom 来源:博客园 作者: barton123 链接:https://www.cnblogs.com/QaStudy/p/11565477.html

pytest_按标记执行

匿名 (未验证) 提交于 2019-12-03 00:11:01
import pytest@pytest . mark . webtestdef test_send_http (): pass @pytest . mark . apptestdef test_devide (): pass @pytest . mark . androiddef test_search (): pass @pytest . mark . iosdef test_add (): passdef test_plus (): pass - m 是标记- s 显示内部打印信息 pytest -s test_mark.py -m 'not ios' 执行标记不等于ios的 pytest -s test_mark.py -m ios 只执行标记==ios的 pytest -s test_mark.py -m=ios 只执行标记==ios的 来源:博客园 作者: barton123 链接:https://www.cnblogs.com/QaStudy/p/11563931.html

pytest-mark跳过

匿名 (未验证) 提交于 2019-12-03 00:11:01
import pytestimport sysenvironment='android'@pytest.mark.skipif(environment=="android",reason='android平台没有这个功能,只有ios下有')def test_add(): print("apple")def test_add2(): print("android")@pytest.mark.skipif(sys.platform=='win32',reason='不在win下运行')@pytest.mark.skipif(sys.version_info<(3,6),reason='3.6以下不执行')def test_add3(): print("windows") 来源:博客园 作者: barton123 链接:https://www.cnblogs.com/QaStudy/p/11563370.html

pytest的断言、跳过、运行的按需要处理

匿名 (未验证) 提交于 2019-12-03 00:11:01
def test_one (): assert 1 == 1 assert 1 != 2 assert { 'name' : 'linda' , 'age' : 19 }=={ 'name' : 'linda' , 'age' : 190 } assert 'hello' in 'helloworld' age = 35 assert 20 < age < 80 assert ( 1 < 2 ) == Truedef f (): return 3def test_two (): assert f ()== 4 来源:博客园 作者: barton123 链接:https://www.cnblogs.com/QaStudy/p/11563166.html

pytest +allure 报告生成

匿名 (未验证) 提交于 2019-12-03 00:08:02
第一步:pip install pytest-allure-adaptor 第二步:编写用例 import allure import pytest """ Feature: 标注主要功能模块 Story: 标注Features功能模块下的分支功能 Severity: 标注测试用例的重要级别 Step: 标注测试用例的重要步骤 Issue和TestCase: 标注Issue、Case,可加入URL attach: 标注增加附件 Environment: 标注环境Environment字段 """ # 环境 allure . MASTER_HELPER . environment (域名= "127.0.0.1" ) @allure . MASTER_HELPER . feature ( "测试" ) class TestClassOne : @allure . MASTER_HELPER . story ( "test_one_1" ) @allure . MASTER_HELPER . severity ( "normal" ) # 运行步骤 @allure . MASTER_HELPER . step ( "单元相当" ) def test_one_1 ( self ): with allure . MASTER_HELPER . step ( "获取变量a" ): a = 3

pytest之fixture使用详解

匿名 (未验证) 提交于 2019-12-03 00:03:02
简介:   fixture区别于unnitest的传统单元测试(setup/teardown)有显著改进:   1.有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活。   2.按模块化的方式实现,每个fixture都可以互相调用。   3.fixture的范围从简单的单元测试到复杂的功能测试,可以对fixture配置参数,或者跨函数function,类class,模块module或整个测试session范围。 fixture可以当做参数传入 定义fixture跟定义普通函数差不多,唯一区别就是在函数上加个装饰器@pytest.fixture(),fixture命名不要以test开头,跟用例区分开。fixture是有返回值得,没有返回值默认为None。用例调用fixture的返回值,直接就是把fixture的函数名称当做变量名称。 # 作者 :admin import pytest @pytest . fixture () def test_01 (): a = 5 return a def test_02 ( test_01 ): assert test_01 == 5 print ( "断言成功" ) ============================= test session starts ============================

pytest֮fixture

匿名 (未验证) 提交于 2019-12-02 23:51:01
pytest 相较于 unittest 最为跳跃的一点应该就是 fixture 机制 对于unittest来说,每个用例的类中都需要去写入setUp和tearDown。也就是我们所说的前置和后置, 而不可避免的,很多用例的前置和后置都是一样(例如很多用例都需要前置登录,后置退出),于是我们需要重复的复制粘贴,这样导致工作量增加,代码量也增加,界面也显得冗杂。 所以此时pytest中fixture机制便要闪亮登场了。 而方便的是:如果很多用例都有同样的前置和后置,那么我就只实现一个,然后需要的用例就去调用就好了。 1.机制:与测试用例同级,或者是测试用例的父级,创建一个conftest.py文件。 2.conftest.py文件里:放所有的前置和后置。 不需要用例.py文件主动引入conftest文件。 3.定义一个函数:包含前置操作+后置操作。 4.把函数声明为fixture :在函数前面加上 @pytest.fixture(作用级别=默认为function) 5.fixture的定义。   如果有返回值,那么写在yield后面。(yield的作用就相当于return)  1. 如下: 定义一个函数名叫open_url的fixture前后置,前置为打开链接,后置为退出浏览器   @pytest.fixture(scope="class") #定义scope的范围   def

Pytest测试框架教程(一)

匿名 (未验证) 提交于 2019-12-02 23:51:01
此文章转载于---------乙醇 ( http://www.testclass.net/pytest/quick_start ) pytest测试框架可以让我们很方便的编写测试用例,这些用例写起来虽然简单,但仍然可以规模化以及编写更加复杂的测试用例。 官方文档 pip install -U pytest 用下面的命令去检查一下pytest是否成功安装 $ pytest --version This is pytest version 3.x.y, imported from $PYTHON_PREFIX/lib/python3.5/site-packages/pytest.py 创建名为 test_quick_start.py 的文件,敲如下内容 def reverse(string): return string[::-1] def test_reverse(): string = "good" assert reverse(string) == "doog" another_string = "itest" assert reverse(another_string) == "tseti" 上面的代码做了2件事情 定义了名为 reverse(string) 的全局函数,作用是把string反转并返回。比如输入"abc"会反转成"cba" 定义了名为 test_reverse(