文件参数化-utp框架之根据yaml文件自动生成python文件+utp运行用例
根据yaml文件自动生成python文件

utp框架:

bin目录:存放执行文件(run.py)
cases目录:存放生成的用例的python文件(该目录下的文件为根据data目录下的测试用例生成的python文件:logoin.py、query.py、reg.py)
conf目录:存放配置文件(case_template(需回顾查看该文件的文件类型)、setting.py)
data目录:存放yaml格式的用例文件(login.yaml、query.yaml、reg.yaml)
lib目录:存放使用到的工具等python文件(tools.py)
logs目录:存放生成的日志文件
report目录:存放生成的测试报告(该目录下为运行程序后产生的测试报告,文件格式为html格式)
readme.txt文件:填写该框架的使用注意点或使用方式
login.yaml内容如下:
-
url : http://ip/api/user/login
method : post
detail : 登录接口
data :
username : niuhany
passwd : aA1234
check :
- sign
- userId
-
url : http://ip/api/user/all_stu
method : get
check :
- sdfsdfs
headers :
Referer : http://api.nnzhp.cn/
detail : 获取所有学生信息接口
case_template内容如下:
import unittest
import ddt
import requests
@ddt.ddt
class %s(unittest.TestCase):
@ddt.file_data(r'%s')
def test_interface(self,**test_data): #代表就是每一个用例数据的那个字典。
url = test_data.get('url') #url
method = test_data.get('method').upper() #method
detail = test_data.get('detail','没写用例描述')#用例描述
self._testMethodDoc = detail #这个变量就是指定用例描述的
data = test_data.get('data',{}) #请求数据
headers = test_data.get('headers',{}) #请求头
cookies = test_data.get('cookies',{}) #cookie
is_json = test_data.get('is_json',0)#标识入参是否为json
check = test_data.get('check') #断言
if method=='POST':
if is_json:
res = requests.post(url, json=data, cookies=cookies, headers=headers).text
else:
res = requests.post(url,data=data,cookies=cookies,headers=headers).text
elif method=='GET':
res = requests.get(url,params=data,cookies=cookies,headers=headers).text
for c in check:
self.assertIn(c,res,'预期结果:'+c+'实际结果:'+res)
setting.py如下:
os.path.abspath():取得当前目录
os.path.dirname():取得当前目录的上一级目录 os.path.join():目录拼接
import os BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #这个程序主目录 DATA_PATH = os.path.join(BASE_PATH,'data') #存放yaml文件的路径 CASE_PATH = os.path.join(BASE_PATH,'cases') #测试用例的目录 LOG_PATH = os.path.join(BASE_PATH,'logs') #日志的路径 REPORT_PATH = os.path.join(BASE_PATH,'report') #日志的路径 CASE_TEMPLATE = os.path.join(BASE_PATH,'conf','case_template') #用例模板的路径
tools.py如下:
[test_suite.addTests(case) for case in all_py]:(需要了解该行代码的含义)
unittest.TestSuite():用例集合
import os
import glob
from conf import setting
import unittest
import BeautifulReport as br
import time
def create_py():
with open(setting.CASE_TEMPLATE,encoding='utf-8') as fr: # 读取CASE_TEMPLATE文件
src_content = fr.read()
all_file = glob.glob(setting.DATA_PATH + os.sep+ '*.yaml')
for file in all_file:
class_name = os.path.split(file)[-1].replace('.yaml','').capitalize()# 获取用例名称,并将名称的首字母大写(login、query、reg)
py_content = src_content % (class_name,file) # case_template中两个s%的取值
py_path = os.path.join(setting.CASE_PATH,class_name.lower()+'.py') # cases目录下创建python文件
open(py_path,'w',encoding='utf-8').write(py_content) #向cases目录下的python文件中写入内容
def run_all_case():
test_suite = unittest.TestSuite()
all_py = unittest.defaultTestLoader.discover(setting.CASE_PATH,'*.py')
[test_suite.addTests(case) for case in all_py]
report = br.BeautifulReport(test_suite)
title = '%s_测试报告'%time.strftime('%Y%m%d%H%M%S')
report.report(title,title,setting.REPORT_PATH)# title为测试报告的名称
return report.filename,report.success_count,report.failure_count
run.py如下:
from lib import tools
def main():
tools.create_py() #生成python文件
file_name,success_count,fail_count = tools.run_all_case() #运行所有的用例
print(file_name,success_count,fail_count)
main()
文件参数化-utp框架之根据yaml文件自动生成python文件+utp运行用例的更多相关文章
- php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类
1. web service普及: Webservice soap wsdl区别之个人见解 Web Service实现业务诉求: Web Service是真正“办事”的那个,提供一种办事接口的统称. ...
- java自动生成entity文件
网上关于自动生成entity文件的代码很多,看了很多代码后,在先辈们的基础上再完善一些功能(指定多个表,全部表). 为了使用方便所以把两个类写在一个java文件中,所以大家可以直接拿这个java文件, ...
- linux下使用automake工具自动生成makefile文件
linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...
- 使用automake等命令自动生成Makefile文件 (转载)
使用automake等命令自动生成Makefile文件 Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多.好在Lin ...
- Wix 安装部署(一)同MSBuild 自动生成打包文件
因为项目需要,最近在研究Wix打包部署,园子里也有一些关于wix的博客,方方面面,讲的点各不同.我自己也在测试过程中,写下过程,以供参考.最新版本WiX Toolset v3.7,如何安装的就不说了, ...
- eclipse下Android无法自动生成apk文件怎么办?
eclipse下Android无法自动生成apk文件怎么办? 现象:创建android工程后,通过手动build/clean或自动build均无法在bin文件夹下生成.apk文件 解决方法:进入win ...
- make自动生成依赖文件的两种形式
最近编译源文件发现当修改头文件后,make并不会自动把包含此头文件的所有源文件重新编译,而每次都是需要把对应的中间文件清除才能重新编译,非常的麻烦.因此需要make自动对源文件所依赖的头文件进行管理, ...
- Android AIDL自动生成Java文件测试
/******************************************************************************** * Android AIDL自动生成 ...
- 程序自动生成Dump文件
前言:通过drwtsn32.NTSD.CDB等调试工具生成Dump文件, drwtsn32存在的缺点虽然NTSD.CDB可以完全解决,但并不是所有的操作系统中都安装了NTSD.CDB等调试工具.了解了 ...
随机推荐
- TCP与UDP比较 以及并发编程基础知识
一.tcp比udp真正可靠地原因 1.为什么tcp比udp传输可靠地原因: 我们知道在传输数据的时候,数据是先存在操作系统的缓存中,然后发送给客户端,在客户端也是要经过客户端的操作系统的,因为这个过程 ...
- java成神之——网络编程基本操作
网络编程 获取ip UDP程序示例 TCP程序 结语 网络编程 获取ip InetAddress id = InetAddress.getLocalHost(); // InetAddress id ...
- Python Twisted架构英文版
原作出处:twisted-intro 作者:Dave 转载声明:版权归原作出处所有,转载只为让更多人看到这部优秀作品合集,如果侵权,请留言告知 Twisted Introduction This mu ...
- flask系列三之Jinja2模板
1.如何渲染模板 模板在‘templates’文件夹下(htnl页面) 从flask中导入render_template函数---渲染html模板 在视图函数中,使用render_template 函 ...
- elastic(10) 基本查询
# 指定index名以及type名的搜索 GET /library/books/_search?q=title:elasticsearch # 指定index名没有type名的搜索 GET /libr ...
- kibana.yml(中文配置详解)
# Kibana is served by a back end server. This controls which port to use. # server.port: 5601 # The ...
- docker 制作本地镜像
docker commit 55ddf8d62688 py_wb # 容器ID, 容器名称tag py_wb IP地址:5000/my-web:20180511 # 远程registory地址 我的镜 ...
- POJ2187(凸包+旋转卡壳)
这道题目的大意是给出一组二维空间的顶点,计算其中距离最远的两个顶点之间的距离. 先说明凸包的概念和求法. 定义:对于多边形P,若将P中任意的两个点(包含边上)用一条线段连接,线段都落于该多边形中(含边 ...
- mysql免安装版1067错误终极解决办法|在windows平台下MySql启动时的1067错误的解决方法及反思
[windows事件查看] 我的电脑--此电脑--右键管理--计算机管理--系统工具--事件查看器--Windows日志--应用程序--找错误标志,如下图 [提示] 按部就班,可能并不能解决你的问题, ...
- Python04 range()方法的使用、turtle.textinput()方法和write()的使用、turtle.numinput()的使用
1 range() 方法的使用 1.1 range方法介绍 range方法会返回一个range类型的对象,该对象会根据range方法的参数产生一些列整型数据 技巧01:range方法有三个参数,第一个 ...