一、ddt(基于unittest)

实例:字典解包【{},{}】

test_data=t.read_excel(mode,case_list)
@ddt
class Interface(unittest.TestCase):
def setUp(self):
logger.info("测试用例开始了。。。。")
@data(*test_data)
@unpack
def test_case(self,id,interface,method,url,data,sql,Expected_code):#直接拆开用
#logger.info("正在执行%s条用例:"%id)
logger.info("正在执行"+"["+str(interface)+"]"+"接口"+str(id)+"条用例")
dict={}
request_result = HttpRequest().http_request(method, url, data)

二、pytest.mark.parametrize()

示例:test.py

import pytest
class TestApi:

#第一种: 列表args解包,输出多个参数
@pytest.mark.parametrize('name,age,a', [["百里", "18","19"], ["星耀", "20","21"]]) # 解包操作,输出多个参数
def test_api_1(self, name, age,a):
print(name, age)

# 第二种 字典 args解包,输出多个参数
t=[{'id': 1, 'module': '注册', 'description': '输入手机号、密码、注册名', 'method': 'get', 'url': 'http://test.lemonban.com//futureloan/mvc/api/member/register','data': {'mobilephone': '18501026696', 'pwd': '123456', 'regname': '666'},'sql': {'my_sql': 'select count(*) from member where mobilephone=%s', 'condition': '18501026696', 'result': 1, 'code': 0},'exception_code': 10001, 'exception_sql_select': 1},
{'id': 2, 'module': '登录', 'description': '输入正确手机号、密码', 'method': 'get', 'url': 'http://test.lemonban.com//futureloan/mvc/api/member/login', 'data': {'mobilephone': '18501026696', 'pwd': '123456'}, 'sql': {'my_sql': 'select count(*) from member where mobilephone=%s', 'condition': '18501026696', 'result': 1, 'code': 0}, 'exception_code': 10001, 'exception_sql_select': 1},
{'id': 3, 'module': '充值', 'description': '输入手机号,充值金额为空', 'method': 'get', 'url': 'http://test.lemonban.com//futureloan/mvc/api/member/recharge', 'data': {'mobilephone': '', 'amount': ''}, 'sql': {'my_sql': 'select LeaveAmount from member where mobilephone=%s', 'result': 'None', 'condition': '', 'code': 0}, 'exception_code': 20103, 'exception_sql_select': 'None'},
{'id': 4, 'module': '充值', 'description': '输入手机号、充值金额', 'method': 'get', 'url': 'http://test.lemonban.com//futureloan/mvc/api/member/recharge', 'data': {'mobilephone': '18501026696', 'amount': 600.0}, 'sql': {'my_sql': 'select LeaveAmount from member where mobilephone=%s', 'result': 600.0, 'condition': '18501026696', 'code': 0}, 'exception_code': 10001, 'exception_sql_select': '600.00'
}]
@pytest.mark.parametrize('caseinfo',t) # 解包操作,输出多个参数
def test_api_11(self,caseinfo):
print(caseinfo["id"],caseinfo["module"])

if __name__ == '__main__':
pytest.main(["-vs", "test.py"])

结果:

具体应用:

第一种:列表【[],[]】 args解包

test_data_list = t.read_data()
class Test_insterface:
#COOKIES=None # 全局变量
@allure.description('测试接口:采用正向和反向用例测试')
@pytest.mark.parametrize('id,module,description,method,url,data,sql,exception_code,exception_sql_select', test_data_list)
def test_case_ykt(self,id,module,description,method,url,data,sql,exception_code,exception_sql_select):
logging.info("正在运行{}接口:第{}条测试用例".format(module, id))
logging.info("测试数据:{},{},{}".format(method, url, data))
result_dict = {} #创建空字典,用于存在请求返回结果的数据

第二种:字典【{},{}】 args解包

test_data=t.read_excel(mode,case_list)
class Test_interFaceCase:
@pytest.mark.parametrize('caseinfo',test_data)#获取数据test_data的方式是字典格式,不能caseinfo数据拆开
def test_interface(self,caseinfo):
id=caseinfo["id"] #因为数据是字典格式[{}],需要拆开使用
module=caseinfo["module"]
method=caseinfo["method"]
url=caseinfo["url"]
data=caseinfo["data"] logging.info("正在运行{}接口:第{}条测试用例".format(module, id))
logging.info("测试数据:{},{},{}".format(method, url, data))

python+接口参数化(ddt和pytest.mark.parametrize())使用的更多相关文章

  1. pytest自动化6:pytest.mark.parametrize装饰器--测试用例参数化

    前言:pytest.mark.parametrize装饰器可以实现测试用例参数化. parametrizing 1.  下面是一个简单是实例,检查一定的输入和期望输出测试功能的典型例子 2.  标记单 ...

  2. Pytest系列(9) - 参数化@pytest.mark.parametrize

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 pytest允许在多个级别启 ...

  3. pytest.mark.parametrize()参数化应用二,读取json文件

    class TestEnorll(): def get_data(self): """ 读取json文件 :return: """ data ...

  4. pytest.mark.parametrize()参数化的应用一

    from page.LoginPage import Loginpage import os, sys, pytest base_dir = os.path.dirname(os.path.dirna ...

  5. 5.@pytest.mark.parametrize()数据驱动

    简介: pytest.mark.parametrize 是 pytest 的内置装饰器,它允许你在 function 或者 class 上定义多组参数和 fixture 来实现数据驱动. @pytes ...

  6. [转]Python测试框架对比----unittest, pytest, nose, robot framework对比

      测试框架 什么是框架? 框架(Framework)是整个或部分系统的可重用设计,框架是用来解决代码的组织及运行控制问题的. 在我们编写自动化脚本的时候,经常需要读取配置文件,读取数据文件,发送请求 ...

  7. Python接口自动化测试框架: pytest+allure+jsonpath+requests+excel实现的接口自动化测试框架(学习成果)

    废话 最近在自己学习接口自动化测试,这里也算是完成一个小的成果,欢迎大家交流指出不合适的地方,源码在文末 问题 整体代码结构优化未实现,导致最终测试时间变长,其他工具单接口测试只需要39ms,该框架中 ...

  8. Python 自动化测试框架 unittest 和 pytest 对比

    一.用例编写规则 1.unittest提供了test cases.test suites.test fixtures.test runner相关的类,让测试更加明确.方便.可控.使用unittest编 ...

  9. python 自动化测试框架unittest与pytest的区别

    前言: 有使用过unittest单元测试框架,再使用pytest单元测试框架,就可以明显感觉到pytest比unittest真的简洁.方便很多. unittest与pytest的区别: 主要从用例编写 ...

  10. pytest.6.Parametrize Fixture

    From: http://www.testclass.net/pytest/parametrizing_fixture/ 背景 @pytest.mark.parametrize 装饰器可以让我们每次参 ...

随机推荐

  1. 笔记本电脑有WIFI,但不可上网

    有时候我们玩电脑时发现连上的WiFi在自己的电脑上不可用,但别人的却好好的,这要怎么办呢? 我们不妨试一试这个方法: 1 打开控制面板 2 点击网络和Internet,点击里面的Internet选项 ...

  2. 自动化测试如此容易!多语言自动化测试框架 Selenium 编程(C#篇)

    介绍 Selenium 官网:https://www.selenium.dev/ Selenium 是功能强大的自动化测试工具集,是支持 Web 浏览器自动化的一系列工具和库的总括项目,一共包括以下三 ...

  3. Nacos服务发现原理分析

    微服务将自己的实例注册到nacos注册中心,nacos服务端存储了注册列表,然后通过ribbon调用服务,具体是如何调用?如果nacos服务挂了,还能正常调用服务吗?调用的服务列表发生变化,调用方是如 ...

  4. UI自动化中上传与唤醒弹窗

    本篇想谈的是在ui自动化中对上传的一些理解,干货满满. 一.是否有必要唤醒弹窗 以selenium为代表的库在进行文件上传时,是可以直接对输入框 "发送" 文件的,其send_ke ...

  5. POJ1737 连通图

    一句话题意:求一个 \(n\) 点带编号的连通图数量. 吐槽一下:好好一道计数 dp 为什么不加取余????逼着选手写高精度的出题人应该拎出去烧--哦楼天城是出题人是吧哦当我没说我什么都没说我现在就把 ...

  6. ABAP PDF 打印

    SPAN { font-family: "Courier New"; font-size: 10pt; color: rgba(0, 0, 0, 1); background: r ...

  7. VideoMAE Masked Autoencoders are Data-Efficient Learners for Self-Supervised Video Pre-Training概述

    0.前言 相关资料: arxiv github 论文解读(知乎,CSDN) 论文基本信息: 领域:视频自监督表示学习 发表时间:NeurIPS 2022(2022.3.23) 1.针对的问题 视频存在 ...

  8. 【C学习笔记】day4-1 在屏幕上输出以下图案

    1.在屏幕上输出以下图案: * *** ***** ******* ********* *********** ************* *********** ********* ******* ...

  9. 访问第三方接口带Authorization认证

    第一种方式 HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add("Authorization", " ...

  10. thymeleaf checkbox的回显

    最近用到了一些thymeleaf 的界面,有写问题一并写出来,如果这篇文章能给你带来帮助不胜荣幸,如果有问题,也请予以批评和改正 第一就是涉及到复选框的一个回显:例如我是单个复选框的是否选中 在< ...