参数化有三种,代码驱动,数据驱动,关键字驱动

代码驱动,测试数据写在代码中 如下:

  1. import requests,json
  2. import unittest
  3. import BeautifulReport
  4. fido_url = 'http://192.168.6.162:8080/uaf/reg/receive'
  5. '''代码驱动,代码实现做参数化的例子'''
  6. reg_receive_data1 = {
  7. "context": {
  8. "appID":"",
  9. "transNo":"",
  10. "userName":"mh",
  11. "transType":"",
  12. "authType":"",
  13. "opType":"",
  14. "devices":{"deviceName": "HUA WEI", "deviceType": "iPhone 7", "deviceID": ""}
  15. }
  16. }
  17. reg_receive_data2 = {
  18. "context": {
  19. "appID":"",
  20. "transNo":"",
  21. "userName":"mh",
  22. "transType":"",
  23. "authType":"",
  24. "opType":"",
  25. "devices":{"deviceName": "HUA WEI", "deviceType": "iPhone 7", "deviceID": ""}
  26. }
  27. }
  28. headers = {
  29. "Connection": "keep-alive",
  30. "Content-Type": "application/json",
  31. "Content-Length": "",
  32. "Host": "192.168.6.162:8080",
  33. "User-Agent": "Apache-HttpClient/4.2.6 (java 1.5)"
  34. }
  35. def fido_reg(url,data,headers):
  36. r = requests.post(url=url,data=json.dumps(data),headers=headers).json()
  37. return r
  38. print(fido_reg(fido_url,reg_receive_data1,headers))#正常的返回
  39. class Reg_receive(unittest.TestCase):
  40. def test(self):
  41. '''请求正常'''
  42. result = fido_reg(fido_url,reg_receive_data1,headers)
  43. self.assertEqual(1200,result.get('statusCode'))
  44. self.assertEqual('OK',result.get('description'))
  45. def test_02(self):
  46. '''appid为空'''
  47. result = fido_reg(fido_url,reg_receive_data2,headers)
  48. self.assertEqual(1401,result.get('statusCode'))
  49. self.assertEqual('Parameter- appID is EMPTY',result.get('description'))
  50.  
  51. bf = BeautifulReport.BeautifulReport(unittest.makeSuite(Reg_receive))
  52. bf.report(filename='测试报告1',description='接口测试报告')

数据驱动,代码读取excel,或txt

  1. import xlrd
  2. import requests
  3. import unittest
  4. import BeautifulReport as bf
  5. import time
  6. import parameterized
  7. import json
  8. path = 'testcase_adapter.xlsx'#定义测试用例名字
  9. testreport = time.strftime('%Y%m%d',time.localtime())#定义测试报告名字
  10. class Op_excel:
  11. def r_excel(self,path):
  12. r_workbook = xlrd.open_workbook(path)
  13. r_sheet = r_workbook.sheets()[0]
  14. return r_sheet,r_workbook
  15. #读excel
  16.  
  17. def get_nrows(self,r_sheet):
  18. nrows = r_sheet.nrows
  19. return nrows
  20.  
  21. e = Op_excel()#实例化一个操作excel的类的对象
  22. newsheet = e.r_excel(path)[0]#对象调用类的操作读excel方法返回操作的sheetnewsheet
  23. newnrows = e.get_nrows(newsheet)#对象调用类返回行数nrownewrows
  24. testdata = []
  25. for i in range(1,newnrows):#循环读取excel中的测试用例,把用例加到testdata中生成二维数组
  26. testdata.append(newsheet.row_values(i))
  27.  
  28. def reg_receive(url,data,headers):#定义发送的post请求
  29. r = requests.post(url=url,data=json.dumps(data),headers=headers).json()
  30. return r
  31.  
  32. class Test_case(unittest.TestCase):
  33. @classmethod #类函数,执行测试用例开始前执行
  34. def setUpClass(cls):
  35. print('接口测试开始')
  36.  
  37. @classmethod #类函数,执行测试用例结束后候执行
  38. def tearDownClass(cls):
  39. print('接口测试结束')
  40.  
  41. @parameterized.parameterized.expand(testdata)#testdata是存的excel中的测试case
  42. def test_reg_receive(self,url,data,headers,expect,desc):
  43. '''测试用例'''
  44. self._testMethodName=desc#desc是对用例的描述
  45. result = reg_receive(url,json.loads(data),json.loads(headers))
  46. statuscode = result['statusCode']#返回状态码
  47. self.assertEqual(int(expect),statuscode)#与测试用例中的状态码进行比对
  48.  
  49. # unittest.main()
  50. bf = bf.BeautifulReport(unittest.makeSuite(Test_case))
  51. bf.report(filename=testreport,description='接口测试报告')

python_自动化测试用例参数化的更多相关文章

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

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

  2. Python自动化测试用例设计--自动化测试用例与手工测试用例区别与联系

    1. 前言 手工测试用例是针对手工测试人员,自动化测试用例是针对自动化测试框架,前者是手工测试用例人员应用手工方式进行用例解析,后者是应用脚本技术进行用例解析,两者最大的各自特点在于,前者具有较好的异 ...

  3. 使用 Python 中 re 模块对测试用例参数化,进行搜索 search、替换 sub

    自动化测试用例,如果一百个接口要在Excel写100个sheet表单,每个接口有10个字段,里面有5个都可能是变化的,需要使用参数化,先试用特定的字符进行站位,在构造参数时在进行替换占位符: 一.用力 ...

  4. 用java和junit编写app自动化测试用例

    package myTest; import static org.junit.Assert.*; import io.appium.java_client.android.AndroidDriver ...

  5. 用python和unittest编写app自动化测试用例

    import unittest import webdriver import time class Test(unittest.TestCase): @classmethod def setUpCl ...

  6. 28. Python编写自动化测试用例

    接口文档已经提供了,requests库.unittest单元测试框架也已经介绍过,笔者相信读者朋友已经可以独立编写接口自动化测试用例了.但是有一些细节,我们需要聊一下.比如我们写登录接口测试用例,用户 ...

  7. 如何统计自动化测试用例的ROI 【投入产出比/投资回报率】

    一. 自动化测试的投入有哪些? 1. 自动化测试的软件平台投入 自动化测试平台的开发时间,实施时间. 2.  自动化测试的框架开发投入+框架维护的投入 开发自动化测试脚本使用的框架,例如通过一些现有框 ...

  8. selenium+python自动化97--unittest参数化(paramunittest)

    前言 paramunittest是unittest实现参数化的一个专门的模块,可以传入多组参数,自动生成多个用例 前面讲数据驱动的时候,用ddt可以解决多组数据传入,自动生成多个测试用例.本篇继续介绍 ...

  9. requests接口自动化-excel参数化

    在数据量大的时候,需要使用文件参数化. excel文件是其中一种. 安装xlrd读取excel文件.(这里是在pycharm安装) 发现选择豆瓣安装失败,阿里云安装成功. 准备excel文件,放在te ...

随机推荐

  1. elasticsearch的备份和恢复(转)

    vim /etc/elasticsearch/elasticsearch.yml path.repo: ["/data/backups/es_backup"] #备份目录,根据自己 ...

  2. 浅谈Angularjs至Angular2后内置指令的变化

    一.科普概要说明 我们常说的 Angular 1 是指 AngularJS: 从Angular 2 开始已经改名了.不再带有JS,只是单纯的 Angular: Angular 1.x 是基于JavaS ...

  3. HP UNIX弱口令

    这种弱口令直接丢进kali linu里用john --wordlist=zd.txt 加上文件

  4. 【Linux-驱动】printk的打印级别

    级别: 日志级别用宏表示,日志级别宏展开为一个字符串,在编译是由预处理器将它和消息本文拼接成一个字符串,因此printk函数中日志级别宏和格式字符串间不能有逗号.printk的日志级别定义在 /inc ...

  5. bochs 2.6.8 常用命令集合

    b addr 在物理地址处设置断点 addr为物理内存地址,不加段基址 lb 在线性地址处设置断点  addr为线性物理地址,不加基址 vb 在虚拟地址上设置断点 addr为段基址:偏移地址, cs段 ...

  6. sql实现同时向主表和子表插入数据方法

    使用sql语句实现同时向主表和子表插入数据方法: Oracle: -- oracle创建sequence create sequence SEQ_test minvalue 1 maxvalue 99 ...

  7. redis在php中实际应用-list

    1.LPUSH Redis Lpush 命令将一个或多个值插入到列表头部. 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作. 当 key 存在但不是列表类型时,返回一个错误.(在Re ...

  8. 搭建springCloud网关zuul

    一.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...

  9. springboot添加https

    一.使用JDK工具keytool生成证书 keytool命令详解 https://blog.csdn.net/zlfing/article/details/77648430 keytool -genk ...

  10. Brain的同步规则

    这段话来自Java编程思想并发一章 什么时候使用同步 如果你正在写一个变量,它可能接下来将被另一个线程读取,或者正在读取一个上一次已经被另一个线程写过的变量,那么你必须使用同步,并且,读写线程都必须用 ...