ddt中的data,unpack,file_data实现数据驱动--数据分离
ddt:Class decorator for subclasses of ``unittest.TestCase``.
-----``unittest.testcase``子类的类修饰器。
首先介绍一下@file_data:
1.file_data可以获取json文件和yaml文件的数据
2.file_data需要把数据放入到独立的json文件中,使用file_data,应用json文件中的内容,与def函数中的参数个数对应,
如下,def中的payload调用file_data中的payload;字典转json=== json.dumps(data)
{
"test_SHZoo_login_登录成功_001": {
"payload": "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"txtUserName\"\r\n\r\n2397244682@qq.com\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"txtPassword\"\r\n\r\n123456\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--"
}
}
@file_data(os.path.join(dataPath,"api/shZoo/SHZ登录错误密码.json"))
def test_003_login_errPwd(self,payload):
res = self.client.send(data=payload, params=self.params)
assertHTTPCode(res=res, code_list=[200])
logger.info(res.text)
self.assertIn("请输入正确的用户名",res.text)
当然数据也可以写到一起,file_data会轮询json文件中的内容,如下json文件,放到上面的代码中,可以运行三次;
但是这样只能做统一的校验
{
"test_SHZoo_login_登录成功_001":{
"payload" :"------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"txtUserName\"\r\n\r\n2397244682@qq.com\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"txtPassword\"\r\n\r\n123456\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--"
},
"test_SHZoo_login_没有密码_002":{
"payload" :"------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"txtUserName\"\r\n\r\n23972446@qq.com\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"txtPassword\"\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--"
},
"test_SHZoo_login_密码不正确_003":{
"payload" :"------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"txtUserName\"\r\n\r\n23972446@qq.com\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"txtPassword\"\r\n\r\n1234567\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--"
}
}
@data:data的数据就比较直观了 数据直接在py文件里面, 没有和py分的太远,比较直观
这里用到的 json.dumps(params) type(json) == 'str'
eg:
@data(a,b)
那么a和b各运行一次用例
@data([a,d],[c,d])
如果没有unpack,那么[a,b]当成一个参数传入用例运行
如果有unpack,那么[a,b]被分解开,按照用例中的两个参数传递
好像还有个parameterized库与data比较类似,可以自学
from parameterized import parameterized
@parameterized.expand([
("user_null", '', "", "请输入帐号"),
("pawd_null", "user", '', "请输入密码"),
("login_error", "error", "error", "帐号或密码错误"),
("login_success", "admin", "admin123456", "admin你好"),
])
import unittest,os,time,json
from utils.client import HTTPClient
from utils.log import logger
from utils.config import Config,reportPath
from utils.HTMLTestRunner_PY3 import HTMLTestRunner
from utils.assertion import assertHTTPCode
from ddt import ddt,data,file_data,unpack @ddt
class test_add_stu(unittest.TestCase): url = 'http://api.nnzhp.cn/api/user/add_stu'
# params = {}
# logger.info(type(params))
# params = json.dumps(params)
# logger.info(type(params)) def setUp(self):
self.client = HTTPClient(url=self.url,method='get')
# @data(("MAC","2","13641551222")) @data(("MAC","",""),("MAC","",""),("MAC","",""),("MAC","",""))
@unpack
def test_add_stu(self,name,grade,phone):
params = {"name":name,"grade":grade,"phone":phone}
logger.info(type(json.dumps(params)))
# logger.info(name)
# logger.info(grade)
# logger.info(phone)
res = self.client.send(data=json.dumps(params)).json()
# logger.info(res.text)
# json_text = json.loads(res.text)
# logger.info(type(json_text))
try:
self.assertIn("请求方式错误",res['msg'])
except:
logger.error("校验失败,msg:{0}" .format(res['msg'])) if __name__=="__main__": unittest.main(verbosity=2)
ddt中的data,unpack,file_data实现数据驱动--数据分离的更多相关文章
- 浅谈PHP中pack、unpack的详细用法
转自:https://segmentfault.com/a/1190000008305573 PHP中有两个函数pack和unpack,很多PHPer在实际项目中从来没有使用过,甚至也不知道这两个方法 ...
- excel 导入数据库 / SSIS 中 excel data source --64位excel 版本不支持-- solution
当本地安装的excel(2013版) 是64-bit时:出现的以下两种错误 解决: 1. excel 导入数据库 , 如果文件是2007则会出现:“The 'Microsoft.ACE.OLEDB.1 ...
- 深入jQuery中的data()
引入 data函数在jQuery中看起来很不起眼, 就像沙滩上一颗平凡的沙子, 但仔细一瞅, 却惊讶的发现data是jQuery中无比重要的一环, 甚至jQuery中各种事件都基于此. data有什么 ...
- 在Salesforce中通过dataloadercliq调用data loader来批量处理数据
上一篇文章讲到,通过data loader去批量处理数据,那么这篇文章将主要讲解在Salesforce中通过dataloadercliq调用data loader来批量处理数据. 1): CLIq文件 ...
- 关于真机调试DDMS中的data文件夹打不开的解决方法
关于真机调试DDMS中的data文件夹打不开的解决方法 今天在开发的时候需要导出程序中的数据库文件查看数据,数据库文件默认就在/data/data/应用包名/databases/数据库名 这个路径下, ...
- 谈谈WCF中的Data Contract(3):WCF Data Contract对Collection & Dictionary的支持
谈谈WCF中的Data Contract(3):WCF Data Contract对Collection & Dictionary的支持 在本篇文章上一部分Order Processing的例 ...
- Css中路径data:image/png;base64的用法详解
今天查看一些网站的css中发现了 background-image:url(data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAYAAAB ...
- eclipse工具中使用Data Source Explorer连接数据库(MySQL)
1.进入Eclipse工具,打开Data Source Explorer.Window==>Show View==>Data Source Explorer(注:如果找不到请选择Other ...
- mysql中的data下的数据文件(.FRM、.MYD、.MYI)恢复为数据
记一次mysql中的data文件操作经历 想拿到一个项目的最新的数据,做功能升级使用,备份一份数据同时也作为本地测试数据,文件有些大,我直接通过远程的phpmyadmin程序导出,不能愉快的玩耍,直接 ...
随机推荐
- 国外DNS服务器总结
国外12个免费的DNS DNS(即Domain Name System,域名系统),是因特网上作为域名和IP地址相互映射的一个分布式数据库,能够让用户更方便的访问互联网,而不用去记住能够被机器直接读取 ...
- Eclipse git pull 报Nothing to fetch 异常原因
eclipse git pull 报错 // 使用这个配置就可以正常pull了 [core] symlinks = false repositoryform ...
- jenkins之jenkins与gitlab集成
实现当git代码使用push的时候自动构建 安装gitlab钩子插件 安装令牌认证插件 在主机上面生产token(其实随便弄一个简单的字符串也可以) openssl rand -hex 10 修改任务 ...
- nginx 上php不可写解决方法
在php.ini中设置的session.save_path会被php-fpm.conf中覆盖 打开php-fpm.conf文件找到php_value['session.save_apth'] 这里的/ ...
- nginx ---refine---按需时间/流量进行调整后台服务器---geocity,proxypass
原理相当于配置文件在启动时进行编译,proxyPass http://mydomain/path/xxxx这种方式是编译成静态的,直接替换成它解析到的ip/vip,只有重新启动时才会重新解析. 而 s ...
- scrapy爬虫系列之五--CrawlSpider的使用
功能点:CrawlSpider的基本使用 爬取网站:保监会 主要代码: cf.py # -*- coding: utf-8 -*- import scrapy from scrapy.linkextr ...
- 转!!spring @component 详解 默认初始化bean的名字 VNumberTask类 就是 VNumberTask
参考链接:信息来源 今天碰到一个问题,写了一个@Service的bean,类名大致为:CUser xml配置: <context:component-scan base-package=&quo ...
- 小米范工具系列之二:小米范 web目录扫描器
最新版本1.1,下载地址:http://pan.baidu.com/s/1c1NDSVe 文件名scandir,请使用java1.8运行 小米范web目录扫描器主要功能是探测web可能存在的目录及文 ...
- andriod(十七)蓝牙profile
1. 蓝牙profile Bluetooth的一个很重要特性,就是所有的Bluetooth产品都无须实现全部的Bluetooth规范.为了更容易的保持Bluetooth设备之间的兼容, Bluetoo ...
- java反射机制与动态代理
在学习HadoopRPC时.用到了函数调用.函数调用都是採用的java的反射机制和动态代理来实现的,所以如今回想下java的反射和动态代理的相关知识. 一.反射 JAVA反射机制定义: JAVA反射机 ...