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实现数据驱动--数据分离的更多相关文章

  1. 浅谈PHP中pack、unpack的详细用法

    转自:https://segmentfault.com/a/1190000008305573 PHP中有两个函数pack和unpack,很多PHPer在实际项目中从来没有使用过,甚至也不知道这两个方法 ...

  2. excel 导入数据库 / SSIS 中 excel data source --64位excel 版本不支持-- solution

    当本地安装的excel(2013版) 是64-bit时:出现的以下两种错误 解决: 1. excel 导入数据库 , 如果文件是2007则会出现:“The 'Microsoft.ACE.OLEDB.1 ...

  3. 深入jQuery中的data()

    引入 data函数在jQuery中看起来很不起眼, 就像沙滩上一颗平凡的沙子, 但仔细一瞅, 却惊讶的发现data是jQuery中无比重要的一环, 甚至jQuery中各种事件都基于此. data有什么 ...

  4. 在Salesforce中通过dataloadercliq调用data loader来批量处理数据

    上一篇文章讲到,通过data loader去批量处理数据,那么这篇文章将主要讲解在Salesforce中通过dataloadercliq调用data loader来批量处理数据. 1): CLIq文件 ...

  5. 关于真机调试DDMS中的data文件夹打不开的解决方法

    关于真机调试DDMS中的data文件夹打不开的解决方法 今天在开发的时候需要导出程序中的数据库文件查看数据,数据库文件默认就在/data/data/应用包名/databases/数据库名 这个路径下, ...

  6. 谈谈WCF中的Data Contract(3):WCF Data Contract对Collection & Dictionary的支持

    谈谈WCF中的Data Contract(3):WCF Data Contract对Collection & Dictionary的支持 在本篇文章上一部分Order Processing的例 ...

  7. Css中路径data:image/png;base64的用法详解

    今天查看一些网站的css中发现了 background-image:url(data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAYAAAB ...

  8. eclipse工具中使用Data Source Explorer连接数据库(MySQL)

    1.进入Eclipse工具,打开Data Source Explorer.Window==>Show View==>Data Source Explorer(注:如果找不到请选择Other ...

  9. mysql中的data下的数据文件(.FRM、.MYD、.MYI)恢复为数据

    记一次mysql中的data文件操作经历 想拿到一个项目的最新的数据,做功能升级使用,备份一份数据同时也作为本地测试数据,文件有些大,我直接通过远程的phpmyadmin程序导出,不能愉快的玩耍,直接 ...

随机推荐

  1. session.cookie.lifetime和session.gc.maxlifetime的关系

    session.cookie.lifetime session.cookie.lifetime 默认是0,即浏览器关闭,session失效:修改这个值的作用是修改sessionid以cookie的形式 ...

  2. VC编译选项 多线程(/MT)

    VC编译选项 多线程(/MT)多线程调试(/MTd)多线程 DLL (/MD)多线程调试 DLL (/MDd)C 运行时库                        库文件Single threa ...

  3. CentOS7.2使用yum配置LNMP环境

    一,安装系统查看 二,yum安装nginx 设置yum源 rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-c ...

  4. CodeForces 651 C Watchmen

    C. Watchmen time limit per test 3 seconds memory limit per test 256 megabytes input standard input o ...

  5. Struts2表单数据接收方式

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/sunshoupo211/article/details/30249239 1.将Action类作 ...

  6. 5.1 Components — Introduction

    1. HTML被设计的时候,浏览器是一个简单的文件浏览器.开发构建大的Web应用程序需要更多的东西. 2. 不是试图取代HTML,然而,Ember.js拥抱它,然后增加了许多新功能使得构建web应用程 ...

  7. C++中的常量定义

    本篇笔记总结自一次代码检视. 一般来说,使用C语言编程时我们都习惯在代码当中使用C当中的宏定义来定义一个数值常量: #define MY_CONST 7 在C++开发项目时,也会经常存在沿袭C当中常量 ...

  8. cocos进阶教程(3)Lua加密技术

    如果开发者不想让游戏中的资源或脚本文件轻易的暴露给其他人,一般会采用对文件进行加密的方式来保护文件或资源被盗用.Quick-Cocos2d-x 为开发者提供了xxtea加密算法,用来对脚本文件及资源进 ...

  9. 2.JVM运行机制 -- JVM序列

    上一次写了1.初步认识JVM -- JVM序列,今天接着记录写JVM的运行机制. 一.JVM启动流程 Java平台包括JVM以及Java语言,其中JVM也是运行在操作系统中的一个应用程序进程,那么也应 ...

  10. 【android】ViewPager 大量内容页的内存优化

    总结:使用FragmentStatePagerAdapter 代替 FragmentPagerAdapter作为大批量内容页的适配器. 详细: 最近App里有一个场景,类似猿题库做题那种:有很多个题目 ...