前言

  之前一篇文章简单介绍了 pytest 以及 pytest.fixture 装饰器 :https://www.cnblogs.com/shenh/p/11572657.html 。实际在写自动化测试脚本中,还会有一些很实用的方法,下文就来讲述下这些用法。

一.pytest.mark.parametrize 装饰器

pytest 内置装饰器 @pytest.mark.parametrize 可以让测试数据参数化,把测试数据单独管理,类似 ddt 数据驱动的作用,方便代码和测试数据分离。

1.一次传多个参数

import pytest

@pytest.mark.parametrize('x,y',[(1,2),(3,4)])
def test_sum(x,y):
sum = x + y
print(sum) if __name__ =="__main__":
pytest.main(['test_sample.py','-s'])

执行结果:

test_sample.py
3
.
7
. ============================== 2 passed in 0.06s ==============================

2.组合传参:

注意:这种方式一共传递了4组参数  (1,3)、(1,4)、(2,3)、(2,4)。这种方式可以简化测试数据,不用手动再将参数组合。

import pytest

@pytest.mark.parametrize('x',[1,2])
@pytest.mark.parametrize('y',[3,4])
def test_sum(x,y):
sum = x + y
print(sum) if __name__ =="__main__":
pytest.main(['test_sample.py','-s'])

执行结果:

test_sample.py
4
.
5
.
5
.
6
. ============================== 4 passed in 0.14s ==============================

二、fixture返回值

1.获取被调用函数返回值

import pytest

@pytest.fixture(scope='function')
def login():
accesstoken = '197ce8083c38467f' return accesstoken def test_sum(login):
token = login
print(token) if __name__ =="__main__":
pytest.main(['test_sample.py','-s'])

执行结果:

test_sample.py
197ce8083c38467f
. ============================== 1 passed in 0.04s ==============================

若被调用函数返回多个参数:

import pytest

@pytest.fixture(scope='function')
def login():
accesstoken = '197ce8083c38467f'
customerguid = '096799f5-e040-11e9-8c01-0242ac11000d' return accesstoken,customerguid def test_sum(login):
token = login[0]
guid = login[1]
print(token)
print(guid) if __name__ =="__main__":
pytest.main(['test_sample.py','-s'])

执行结果:

test_sample.py
197ce8083c38467f
096799f5-e040-11e9-8c01-0242ac11000d
. ============================== 1 passed in 0.07s ==============================

2.单个用例调用多个函数

import pytest

@pytest.fixture(scope='function')
def login():
print('登录') @pytest.fixture(scope='function')
def conn():
print('连接数据库') def test_1(login,conn):
print('测试用例1') def test_2():
print('测试用例2') if __name__ =="__main__":
pytest.main(['test_sample.py','-s'])

执行结果:

test_sample.py
登录
连接数据库
测试用例1
.
测试用例2
. ============================== 2 passed in 0.05s ==============================

三、测试用例分类

有时候我们只需执行部分测试用例,比如从用例集当中挑选 smoke 测试,要怎么做呢?通过装饰器 @pytest.mark.smoke,smoke 是可以自定义的,运行时加上命令‘-m=smoke’,pytest 就会挑选带有装饰器的类或函数运行。

import pytest

@pytest.fixture(scope='function')
def login():
accesstoken = '197ce8083c38467f'
customerguid = '096799f5-e040-11e9-8c01-0242ac11000d' return accesstoken,customerguid @pytest.mark.smoke
def test_sum(login):
token = login[0]
guid = login[1]
print(token)
print(guid) def test_2():
print('测试用例') if __name__ =="__main__":
pytest.main(['test_sample.py','-s','-m=smoke'])

执行结果:

test_sample.py
197ce8083c38467f
096799f5-e040-11e9-8c01-0242ac11000d
. ======================= 1 passed, 1 deselected in 0.02s =======================

pytest 常见用法的更多相关文章

  1. Linux中find常见用法

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数 ...

  2. php中的curl使用入门教程和常见用法实例

    摘要: [目录] php中的curl使用入门教程和常见用法实例 一.curl的优势 二.curl的简单使用步骤 三.错误处理 四.获取curl请求的具体信息 五.使用curl发送post请求 六.文件 ...

  3. Guava中Predicate的常见用法

    Guava中Predicate的常见用法 1.  Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...

  4. find常见用法

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数 ...

  5. iOS 开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  6. iOS开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  7. [转]EasyUI——常见用法总结

    原文链接: EasyUI——常见用法总结 1. 使用 data-options 来初始化属性. data-options是jQuery Easyui 最近两个版本才加上的一个特殊属性.通过这个属性,我 ...

  8. NSString常见用法总结

    //====================NSStirng 的常见用法==================== -(void)testString { //创建格式化字符串:占位符(由一个%加一个字 ...

  9. [转]Linux中find常见用法示例

    Linux中find常见用法示例[转]·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;find命令的参 ...

随机推荐

  1. MySQL基础之自连接用法简介

    MySQL系列之自连接简介,MySQL自连接操作,没有特定的关键字,所谓自连接指的是同一个表不同实例之间的join操作 引用https://www.w3resource.com的图示: 特征: 自连接 ...

  2. 15-Django开发REST接口

    使用Django开发REST接口 我们以在Django框架中使用的图书以及书中人物案例来写一套支持图书数据增删改查的REST API接口,来理解REST API的开发(前后端均发送JSON格式数据) ...

  3. pytest执行用例时从conftest.py抛出ModuleNotFoundError:No module named 'XXX'异常的解决办法

    一.问题描述 在项目根目录下执行整个测试用例,直接从conftest.py模块中抛出了ModuleNotFoundError:No module named 'TestDatas'的异常: 二.解决方 ...

  4. ASP.NET Core 如何用 Cookie 来做身份验证

    前言 本示例完全是基于 ASP.NET Core 3.0.本文核心是要理解 Claim, ClaimsIdentity, ClaimsPrincipal,读者如果有疑问,可以参考文章 理解ASP.NE ...

  5. Solr java.sql.SQLException: null, message from server: "Host 'xxx' is not allowed to connect to this MySQL server

    在用solr从mysql导入数据的时候,因为linux和本机的数据库不在同一个ip段上, 又因为本地的mysql没有设置远程其它ip可以访问所以就报了如下错误 解决办法: 在mysql任意可以输入查询 ...

  6. JQuery学习笔记(2)——数组 属性 事件

    each遍历 JQueryObjectArray.each(function(index,Element)) $(".myTable").each(function(i,ele){ ...

  7. vs code搭建Django环境

    在网上找了很多博客,看了vs code的官方文档,最终拼凑起来,终于搭建起来了djangode开发虚拟环境(win10下) 一.新建项目文件夹 F:\Python\temp\django_demo(例 ...

  8. Flask 教程 第三章:Web表单

    本文翻译自 The Flask Mega-Tutorial Part III: Web Forms 这是Flask Mega-Tutorial系列的第三部分,我将告诉你如何使用Web表单. 在第二章中 ...

  9. java基础第十四篇之Map

    一,Map集合的特点: *  * 1.Map集合和Collection集合,没有关系 *  * 2.Map集合的元素是成对存在(夫妻关系) *         Collection集合的元素是独立存在 ...

  10. Implement Custom Business Classes and Reference Properties 实现自定义业务类和引用属性(XPO)

    In this lesson, you will learn how to implement business classes from scratch. For this purpose, the ...