目录

前言

接口自动化测试框架

Jenkins自动执行测试命令


前言

前些天学了一下python自定义接口自动化测试框架及Jenkins实现无人值守进行自动测试的操作,内容不是很多,但是需要一些逻辑和理解才能上手。


接口自动化测试框架

下面介绍python构建接口自动化测试的自定义框架,主要通过读取excel文件进行自动化操作,对执行测试的脚本进行封装。

读取excel文件中数据并输出

测试数据 = xfile.read("模拟测试用例.xls").excel_to_dict(sheet=1)
print(测试数据)  # == 【{},{}】

执行该代码返回列表字典嵌套格式的数据

jenkins使用win的python_jenkins使用win的python

[{'描述': '用户登录', '用例编号': 'hc_shop_api_001', '接口URL': 'http://shop-xo.hctestedu.com/index.php?s=api/user/login', '请求方式': 'post', 'URL参数': '{    "application":"app",    "application_client_type": "weixin",\n}', '表单参数': '', 'JSON参数': ' {\n    "accounts":"huace_xm",\n"pwd": 123456,\n    "type":"username"\n}', '预期状态码': '', '预期返回内容': '', '备注': '', '提取参数': 'token', '需要参数': ''}, {'描述': '添加购物车', '用例编号': 'hc_shop_api_001', '接口URL': 'http://shop-xo.hctestedu.com/index.php?s=api/cart/save&token=${token}', '请求方式': 'post', 'URL参数': '{    "application":"app",    "application_client_type": "weixin",\n}', '表单参数': '', 'JSON参数': '{\n    "goods_id": "2",\n    "spec": [\n        {\n            "type": "套餐",\n            "value": "套餐二"\n        },\n        {\n            "type": "颜色",\n            "value": "银色"\n        },\n        {\n            "type": "容量",\n            "value": "64G"\n        }\n    ],\n    "stock": 2\n}', '预期状态码': '', '预期返回内容': '', '备注': '', '提取参数': '', '需要参数': 'token'}]

 引用pytest装饰器自动执行

@pytest.mark.parametrize("case_info",测试数据)  # 传入一个列表,自动解析,自动执行
def test_case_exec(case_info):
    url = case_info["接口URL"]
    if "$" in url:
        url = Template(url).substitute(g_var().show_dict())

    rs = requests.request(url=url,
                          params=eval(case_info["URL参数"]),
                          data=eval(case_info["JSON参数"]),
                          method=case_info["请求方式"])

    if case_info["提取参数"]:
        ltoken = jsonpath.jsonpath(rs.json(),"$.."+case_info["提取参数"])
        g_var().set_dict(case_info["提取参数"],ltoken[0])

其中,参数传递问题由下面判断语句解决,优先执行需要传参的用例

if "$" in url:
        url = Template(url).substitute(g_var().show_dict())

执行用例

rs = requests.request(url=url,
                          params=eval(case_info["URL参数"]),
                          data=eval(case_info["JSON参数"]),
                          method=case_info["请求方式"])

检查执行的用例中是否存在需要传递的参数,若有则提取存放在g_var()中

if case_info["提取参数"]:
        ltoken = jsonpath.jsonpath(rs.json(),"$.."+case_info["提取参数"])
        g_var().set_dict(case_info["提取参数"],ltoken[0])
# 作用: 在不同的python文件之间保存数据,传递数据
class g_var(object):
   # 存放一个可以无限放变量的容器? -- 好找--不重复 有唯一标识
   _global_dict ={} # 空字典 内置变量 -- 数据结构 变量的污染 name  name

   def set_dict(self,key,value):  # 函数 --  PI*r*r
       self._global_dict[key] = value


   def get_dict(self,key):
       return self._global_dict[key]

   def show_dict(self):
       return self._global_dict

执行完上述代码后,我们可以发现,并不能判断所有用例是否被正常执行,那么需要引入断言机制

jenkins使用win的python_servlet_02

 预期状态码设置为201,返回的真实状态码为200,则显示异常

jenkins使用win的python_servlet_03

通过以上操作,测试工作基本完成,可使用allure命令生成测试报告

if __name__ == '__main__':
    pytest.main(["-vs",
                 "--capture=sys",
                 "Test_apiframwork.py",
                 "--clean-alluredir",
                 "--alluredir=allure-results"])
    #系统帮我们生成一个页面文件
    os.system("allure generate allure-results -o report_allure --clean")

jenkins使用win的python_jenkins_04

jenkins使用win的python_java_05

 通过命令窗口输入

jenkins使用win的python_jenkins使用win的python_06

 生成类似下面的allure报告界面(本次实验缺少完整的项目测试数据)

jenkins使用win的python_jenkins_07

值得一提的是,使用allure要先下载解压allure并进行环境配置否则无法正常生成allure报告

Jenkins自动执行测试命令

使用Jenkins工具实现测试命令的自动执行,可减去人工执行测试的操作,且能自动发送结果到目标地址。