根据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运行用例的更多相关文章

  1. php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类

    1. web service普及: Webservice soap wsdl区别之个人见解 Web Service实现业务诉求:  Web Service是真正“办事”的那个,提供一种办事接口的统称. ...

  2. java自动生成entity文件

    网上关于自动生成entity文件的代码很多,看了很多代码后,在先辈们的基础上再完善一些功能(指定多个表,全部表). 为了使用方便所以把两个类写在一个java文件中,所以大家可以直接拿这个java文件, ...

  3. linux下使用automake工具自动生成makefile文件

    linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...

  4. 使用automake等命令自动生成Makefile文件 (转载)

    使用automake等命令自动生成Makefile文件   Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多.好在Lin ...

  5. Wix 安装部署(一)同MSBuild 自动生成打包文件

    因为项目需要,最近在研究Wix打包部署,园子里也有一些关于wix的博客,方方面面,讲的点各不同.我自己也在测试过程中,写下过程,以供参考.最新版本WiX Toolset v3.7,如何安装的就不说了, ...

  6. eclipse下Android无法自动生成apk文件怎么办?

    eclipse下Android无法自动生成apk文件怎么办? 现象:创建android工程后,通过手动build/clean或自动build均无法在bin文件夹下生成.apk文件 解决方法:进入win ...

  7. make自动生成依赖文件的两种形式

    最近编译源文件发现当修改头文件后,make并不会自动把包含此头文件的所有源文件重新编译,而每次都是需要把对应的中间文件清除才能重新编译,非常的麻烦.因此需要make自动对源文件所依赖的头文件进行管理, ...

  8. Android AIDL自动生成Java文件测试

    /******************************************************************************** * Android AIDL自动生成 ...

  9. 程序自动生成Dump文件

    前言:通过drwtsn32.NTSD.CDB等调试工具生成Dump文件, drwtsn32存在的缺点虽然NTSD.CDB可以完全解决,但并不是所有的操作系统中都安装了NTSD.CDB等调试工具.了解了 ...

随机推荐

  1. ASP.NET页面传值加号变空格解决办法

    只需要把欲传值进行编码 string EncodeId = Server.UrlEncode(id); 加号就变成了 % 2 B  (中间无空格) 然后再传出去. Request.QueryStrin ...

  2. linux中zookeeper

    linux中zookeeper 安装jdk tar -zxvf jdk-11.0.1_linux-x64_bin.tar.gz -C /usr/src sudo vim /etc/profile 输入 ...

  3. java成神之——安全和密码

    安全和密码 加密算法 公钥和私钥加密解密 生成私钥和公钥 加密数据 解密数据 公钥私钥生成的不同算法 密钥签名 生成加密随机数 基本用法 指定算法 加密对象 SealedObject Signatur ...

  4. PCA主成分分析 ICA独立成分分析 LDA线性判别分析 SVD性质

    机器学习(8) -- 降维 核心思想:将数据沿方差最大方向投影,数据更易于区分 简而言之:PCA算法其表现形式是降维,同时也是一种特征融合算法. 对于正交属性空间(对2维空间即为直角坐标系)中的样本点 ...

  5. Storm集群详细部署

    1.安装zookeeper 3.1下载zookeeper安装包, 建议下载3.4.5及以上的版本 http://www.apache.org/dyn/closer.cgi/zookeeper/ 3.2 ...

  6. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 2_Linear regression with one variable 单变量线性回归

    Lecture2   Linear regression with one variable  单变量线性回归 2.1 模型表示 Model Representation 2.1.1  线性回归 Li ...

  7. laravel中间键组

    ` php artisan make:middleware Lend这边我定义一个登陆的中间件这边要注意的就是,当条件成立的时候一定要 return $next($request);不写这个larav ...

  8. C++中内存区域的划分

    栈存储区 那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区.里面的变量通常是局部变量.函数参数等. 堆存储区(自由存储区) 那些由new或者malloc分配的内存块,他们的释放编译器 ...

  9. fopencookie函数详解

    今天看DPDK时,看到了fopencookie函数,以前基本没有用过该函数,乘此机会好好看看如何使用. 1. 函数头文件与函数原型 函数头文件: #include <stdio.h> 函数 ...

  10. SEO网站结构优化

    结构布局优化:用扁平化结构(层次结构超过三层小蜘蛛就不愿意爬了) 控制首页链接数量(中小网站100以内,页面导航.底部导航.锚文字链接等) 扁平化的目录层次(小蜘蛛跳转3次可以到达网站内任何一个内页, ...