前言

  之前一篇文章简单介绍了 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. ActiveMQ是什么,为什么使用MQ

    是基于 Java 中的 JMS 消息服务规范实现的一个消息中间件. 1.系统解耦 采用中间件之后,就可以完美解决上述中因为耦合可能导致的问题.系统 A 不用去 关心下层服务调用方的问题. 2. 异步调 ...

  2. SSD与HDD、HHD的区别

    SSD与HDD.HHD的区别 HDD机械硬盘 SSD固态硬盘 HHD混合硬盘

  3. Java开发桌面程序学习(五)——文件选择器和目录选择器的使用

    选择器的使用 DirectoryChooser目录选择器官方文档 FileChooser文件选择器官方文档 文件选择器的使用 JavaFx中有个FileChoser,可以打开一个对话框来选择文件 Fi ...

  4. vue-父组件和路由

    父子组件之间传值 <div id="app"> <com1 v-bind:parentmsg="msg" @func="getMsg ...

  5. PlayJava Day003

    今日所学: /* 2019.08.19开始学习,此为补档. */ ①char:只能有一个字段.字符:' ' ②二进制:0000 0000 最后一位为0就不算,为1代表20. 如25为:0001 100 ...

  6. MySQL学习——查看数据库信息

    MySQL学习——查看数据库信息 摘要:本文主要学习了查看数据库信息的方法. 查询指定表的索引 语法 show index from 表名; 示例 mysql> show index from ...

  7. ping、网络抖动与丢包

    基本概念: ping: PING指一个数据包从用户的设备发送到测速点,然后再立即从测速点返回用户设备的来回时间.也就是俗称的“网络延迟”   一般以毫秒(ms)计算   一般PING在0~100ms都 ...

  8. JS引擎和作用域、编译器之间对话

    关于以下代码段: function foo(a) { console.log( a ); // 2 } foo( 2 ); JS引擎和作用域.编译器之间对话:

  9. 微信小程序踩坑日记4——真机端解析json数组和开发平台不一样

    0. 引言 环境:访问服务器端php,获取json数组,并渲染在前台 问题描述:保证在开发平台上的正常运行,但是在真机端却出现了无法正确解析wx.request()返回的数据(特指无法解析res.da ...

  10. 导入部署 hand

    差价导入部署步骤如下: 执行视图,包. 定义消息,验证的时候使用(XXC1003DFM_BI_001 到 XXC1003DFM_BI_007,含中英文). 通用导入设置: 电子表元数据管理,含导入正确 ...