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. 国外DNS服务器总结

    国外12个免费的DNS DNS(即Domain Name System,域名系统),是因特网上作为域名和IP地址相互映射的一个分布式数据库,能够让用户更方便的访问互联网,而不用去记住能够被机器直接读取 ...

  2. Eclipse git pull 报Nothing to fetch 异常原因

    eclipse git pull 报错 // 使用这个配置就可以正常pull了        [core]        symlinks = false         repositoryform ...

  3. jenkins之jenkins与gitlab集成

    实现当git代码使用push的时候自动构建 安装gitlab钩子插件 安装令牌认证插件 在主机上面生产token(其实随便弄一个简单的字符串也可以) openssl rand -hex 10 修改任务 ...

  4. nginx 上php不可写解决方法

    在php.ini中设置的session.save_path会被php-fpm.conf中覆盖 打开php-fpm.conf文件找到php_value['session.save_apth'] 这里的/ ...

  5. nginx ---refine---按需时间/流量进行调整后台服务器---geocity,proxypass

    原理相当于配置文件在启动时进行编译,proxyPass http://mydomain/path/xxxx这种方式是编译成静态的,直接替换成它解析到的ip/vip,只有重新启动时才会重新解析. 而 s ...

  6. scrapy爬虫系列之五--CrawlSpider的使用

    功能点:CrawlSpider的基本使用 爬取网站:保监会 主要代码: cf.py # -*- coding: utf-8 -*- import scrapy from scrapy.linkextr ...

  7. 转!!spring @component 详解 默认初始化bean的名字 VNumberTask类 就是 VNumberTask

    参考链接:信息来源 今天碰到一个问题,写了一个@Service的bean,类名大致为:CUser xml配置: <context:component-scan base-package=&quo ...

  8. 小米范工具系列之二:小米范 web目录扫描器

    最新版本1.1,下载地址:http://pan.baidu.com/s/1c1NDSVe  文件名scandir,请使用java1.8运行 小米范web目录扫描器主要功能是探测web可能存在的目录及文 ...

  9. andriod(十七)蓝牙profile

    1. 蓝牙profile Bluetooth的一个很重要特性,就是所有的Bluetooth产品都无须实现全部的Bluetooth规范.为了更容易的保持Bluetooth设备之间的兼容, Bluetoo ...

  10. java反射机制与动态代理

    在学习HadoopRPC时.用到了函数调用.函数调用都是採用的java的反射机制和动态代理来实现的,所以如今回想下java的反射和动态代理的相关知识. 一.反射 JAVA反射机制定义: JAVA反射机 ...