python接口自动化基础框架结构 ——分层

--bin 用于存放启动文件,如run.py

--cases cases目录,存放测试脚本

--data   YAML文件

--lib  存放各种附加的代码文件,如加密、链接数据库、生成测试脚本等

--report   存放报告

--setting.py 存放各种路径配置、服务器接口配置等等

--case_template.txt   模板文件,生成测试脚本的模板

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

--setting.py 存放各种路径配置、服务器接口配置等等

import os

#设置目录的绝对路径BASE_PATH = os.path.dirname(os.path.abspath(__file__))DATA_PATH = os.path.join(BASE_PATH, 'data')   #yaml测试用例存放位置CASE_PATH = os.path.join(BASE_PATH, "testcase") #测试用例存放位置REPORT_PATH = os.path.join(BASE_PATH, 'report')  #测试报告存放位置

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

--case_template.txt   模板文件,生成测试脚本的模板

#接口自动化模板import osimport unittestimport requestsfrom lib.md5_passwd import hash_codefrom ddt import ddt,file_datafrom lib.set_case_file import set_res_datafrom setting import DATA_PATH

@ddtclass %(class_name)s(unittest.TestCase):    @file_data(os.path.join(DATA_PATH, '%(data_file)s.yaml'))    def test_%(method_name)s(self, **casedata):        url = casedata.get('url')        data = casedata.get('data')        method = casedata.get("method")        if "password" in data:                  #判断是否存在密码            data["password"] = hash_code(data["password"])  # 密码取出后加密传给自身        if method == "post":            result = requests.post(url=url, data=data)      #post请求        else:            result = requests.get(url=url, params=data)    #get请求        try:            if method.lower()=='post':                res = requests.post(url,data=data)                resp = res.text            else:                res = requests.get(url,params = data)                resp =res.text        except Exception as e:            print("接口请求出错!")            resp = e

        asserlist = casedata.get("asserlist")        check = set_res_data(result.text)        for asser in asserlist:            self.assertIn(asser, check)

if __name__ == '__main__':    unittest.main()

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————--bin 用于存放启动文件,如run.pyrun.py文件代码
import osimport sysimport unittestfrom setting import *from lib.set_case_file import create_case_fileimport timefrom BeautifulReport import BeautifulReport as BetRep

#将当前项目的目录加入零时环境变量,避免在其他地方运行时会出现引入错误base_path = os.path.dirname(    os.path.dirname(os.path.abspath(__file__)))sys.path.append(base_path)

#首先调用生成用例函数create_case_file()#查找用例discover = unittest.defaultTestLoader.discover(    start_dir=CASE_PATH,    pattern='*.py')#执行生成测试报告tittle = '接口测试'time_now = time.strftime('%Y-%m-%d-%H_%M_S')runner = BetRep(discover)runner.report(tittle,              filename='{}_接口测试'.format(time_now),              report_dir=REPORT_PATH              )
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————lib  存放各种附加的代码文件,如加密、链接数据库、生成测试脚本等

MD5加密
import hashlibdef hash_code(pwd):    md5 = hashlib.md5()   #获取md5对象md5.update(pwd.encode('utf-8'))  #将传入的pwd编码后,更新MD5的状态return md5.hexdigest()   #返回十六进制的MD5码

if __name__ == '__main__':print(hash_code('12345'))
set_case_file.py        生成测试脚本
from setting import  *def set_res_data(res):if res:return res.lower().replace('":"', "=").replace('":', "=")

def create_case_file():    file_lists = os.listdir(DATA_PATH)   #取出data目录下的所有文件template_file = os.path.join(BASE_PATH,'case_template.txt')for fList in file_lists:if fList.endswith('.yaml') or fList.endswith('.yml'):#测试用例文件名和yaml文件名data_file = fList.replace('.yaml','').replace('.yml','')#测试用例方法名test_method_name = data_file.lower()  #方法名全小写        #测试用例类名test_class_name = test_method_name.capitalize()  #首字母大写with open(template_file,'r',encoding='utf-8') as temp:                content = temp.read()%{'class_name' :test_class_name,'method_name' : test_method_name,'data_file' : data_file                }            test_case_file = 'test_{}.py'.format(data_file)#根据模板生成测试用例文件with open(os.path.join(CASE_PATH,test_case_file),'w',encoding='utf-8') as f:                f.write(content)
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————YAML文件以小白接口为例,数据需替换
-   #用户注册method: posturl: http://hd215.api.okayapi.com/?s=App.User.Registerdata:app_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXusername: xxxpassword: xxx
asserlist:  - ret=200  - err_code=0  - err_msg=

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

转载于:https://www.cnblogs.com/hlyzoo/p/10950187.html

python接口自动化基础框架结构 ——分层相关推荐

  1. Python接口自动化之登录接口测试

    VOL 117 29 2020-04 今天距2020年246天 这是ITester软件测试小栈第117次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  2. Python接口自动化之动态数据处理

    VOL 135 15 2020-06 今天距2021年199天 这是ITester软件测试小栈第135次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  3. Python接口自动化之接口依赖

    VOL 129 28 2020-05 今天距2021年216天 这是ITester软件测试小栈第129次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  4. Python接口自动化之logging封装及实战

    VOL 124 15 2020-05 今天距2021年230天 这是ITester软件测试小栈第124次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  5. Python接口自动化之logging日志

    VOL 122 11 2020-05 今天距2021年234天 这是ITester软件测试小栈第122次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  6. Python接口自动化之pymysql数据库操作

    VOL 120 06 2020-05 今天距2021年239天 这是ITester软件测试小栈第120次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  7. Python接口自动化之yaml配置文件

    VOL 119 04 2020-05 今天距2021年241天 这是ITester软件测试小栈第119次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  8. Python接口自动化之数据驱动

    VOL 118 01 2020-05 今天距2021年244天 这是ITester软件测试小栈第118次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  9. Python接口自动化之unittest单元测试

    ------·今天距2021年251天·------ 这是ITester软件测试小栈第115次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化之requests请求封装,主要通 ...

最新文章

  1. 编程之美-一摞烙饼的排序方法整理
  2. 【CentOS Linux 7】实验2【Shell编程及应用】
  3. Facets:评估机器学习数据集质量利器 (来自Google、可交互、可可视化)
  4. js和php能生成一样的随机数_JavaScript_JS生成某个范围的随机数【四种情况详解】,前言: JS没有现成的函数,能 - phpStudy...
  5. 12个ggplot2扩展包帮你实现更强大的可视化
  6. 知网下载学位论文PDF版本的一个方法
  7. 有什么计算机应用基础的app,计算机应用基础软件
  8. c语言贪吃蛇游戏代码较难,用C语言编写贪吃蛇代码(难度可选)
  9. DirectX修复工具使用技巧之二——手动修复C++创建失败的文件
  10. 身份证识别技术发展背景及特点
  11. PS 图片背景变为透明
  12. 吐鲁番市谷歌高清卫星地图下载
  13. 基于JavaWeb实现的问卷调查系统
  14. openLayers6系列理论基础——Layer数据源source篇
  15. Html5 文件上传
  16. 添加tomcat服务
  17. 如何引流?分享6个零成本引流获客方式,秒杀全网
  18. 如何查询本人医保就医明细
  19. 红黑树检索/插入/删除
  20. 除了labview你还知道哪些工业控制领域的软件?

热门文章

  1. 【Metabase二次开发 • 四】元数据解析
  2. 平分肥宅快乐水之辗转相除法
  3. libsvm java 实例_LibSvm流程及java代码测试
  4. 【MFC】EnableWindow:启用/禁用控件或窗口
  5. 【githubshare】全功能复现的 Instagram 克隆版,覆盖了诸多 ins 常用的前后端功能
  6. Zigbee 计量插座
  7. 不好意思,它就是电影票房榜上的烂片!
  8. 又一家晶圆代工企业IPO,成立4年全球排名第15,盈利要等到2026年
  9. 计算机图形学代码放大缩小,当今主流数字图像缩放技术的算法
  10. 关于php页面无缘无故不能访问的一个问题