testrun模块呢就是最终自动化测试入口,调用前面封装的各个模块主要流程是:

1. 获取测试集种待执行的测试用例

2. 处理测试用例获取的数据,包括转换数据格式,处理数据的中的关联等

3. 处理完数据后发生request,获取返回结果,同时处理返回结果

4. 处理返回结果包括断言结果列表,提取变量,获取测试报告所需内容等

代码如下:

from ProVar.ProjConfigVar import *
from Util.getTestSuit import *
from Action.KeyAction import *
from Util.TestDataHandler import *
from Util.AssertResult import *
from Util.html_report import *
from Util.ClearData import *
import os
import re
#获取测试数据文件的绝对路径
#获取待测接口测试集
# 执行前先清除上次执行结果
clear()
# 开始运行
test_suit = get_test_case_sheet_names(ExceldirPath)
test_results_for_html_report = []
# 存储全局变量
global_vars = {}
#实例化一个Excel实例,用于回写每一个test_case的result到Excel
excel_instance_for_result_write = Excel(ExceldirPath)
for test_sheet_name in test_suit:
flag = True
# 请求接口sheet
apiName = test_sheet_name[1]
excel_instance_for_result_write.set_sheet_by_name(apiName)
# 获取测试步骤测试用例集
test_cases = test_cases_from_test_data_sheet(ExceldirPath,apiName)
# 转换数据格式
# test_cases = pre_data_hander(test_cases,global_vars)
for test_case in test_cases:
test_case = pre_data_hander(test_case,global_vars)
start_time = time.time()
test_case_serials,method,baseurl,header,auth,body,assert_content,var_get_reg,assert_word,test_case_name= test_case
# print(var_get_reg)
response= api_request(method,baseurl,header,auth,body,test_case_name)
end_time=time.time()
try:
info("接口的响应结果是:%s" %response.text)
# excel书写response的状态码和response内容
excel_instance_for_result_write.write_cell_value(int(test_case[0]+1),Test_Case_executeResult_col_no+1,response.status_code)
excel_instance_for_result_write.write_cell_value(int(test_case[0]+1),Test_Case_result_content_col_no+1,response.text)
# excel书写测试执行时间
excel_instance_for_result_write.write_current_time(int(test_case[0]+1),Test_Case_execute_time_col_no+1)
if assert_content:#如果有断言sheet
info("断言表为:%s" % assert_content)
if assert_result(excel_instance_for_result_write,response,assert_content):
# excel书写断言结果
excel_instance_for_result_write.write_cell_value(int(test_case[0] + 1),Test_Case_assert_result_col_no + 1, "成功", "green",apiName)
# 写report需要的字段
test_results_for_html_report.append(
(test_case_name,response.url, body, response.text, int((end_time - start_time) * 1000), assert_content, "成功"))
else:
excel_instance_for_result_write.write_cell_value(int(test_case[0] + 1),
Test_Case_assert_result_col_no + 1, "失败", "red",apiName)
# 写report需要的字段
test_results_for_html_report.append(
(test_case_name,response.url, body, response.text, int((end_time - start_time) * 1000), assert_content, "失败"))
flag = False
# 如果仅仅是单纯的验证某一个返回结果字段
elif assert_word:
info("断言字段为:%s" % assert_word)
if re.search(assert_word,response.text):
# excel书写断言结果
excel_instance_for_result_write.write_cell_value(int(test_case[0] + 1),Test_Case_assert_result_col_no + 1, "成功", "green",apiName)
# 写report需要的字段
test_results_for_html_report.append(
(test_case_name,response.url, body, response.text, int((end_time - start_time) * 1000), assert_content, "成功"))
else:
excel_instance_for_result_write.write_cell_value(int(test_case[0] + 1),
Test_Case_assert_result_col_no + 1, "失败", "red",apiName)
# 写report需要的字段
test_results_for_html_report.append(
(test_case_name,response.url, body, response.text, int((end_time - start_time) * 1000), assert_content, "失败"))
flag = False
#如果var_get_reg不为空,即要求提取返回变量
if var_get_reg:
var_name = var_get_reg.split("||")[0]
regx = var_get_reg.split("||")[1]
# print(var_name,regx)
if re.findall(regx, response.text):
var_value = re.findall(regx, response.text)
# 去除重复数据
var_value = list(set(var_value))
exec("global_vars['%s']=%s" % (var_name, var_value))
info("从响应中提取的变量名%s,变量值为%s" % (var_name, var_value))
info("生成全局变量名: global_vars['%s']=%s" % (var_name, var_value))
# 将提取的变量写入excel
excel_instance_for_result_write.write_cell_value(int(test_case[0] + 1),Test_Case_var_result_col_no+1,str(var_value),None,apiName)
except IndexError:
info('提取变量失败:'+traceback.format_exc())
excel_instance_for_result_write.write_cell_value(int(test_case[0] + 1),Test_Case_var_result_col_no+1,"Failed","red",apiName)
except:
# traceback.print_exc()
excel_instance_for_result_write.write_cell_value(int(test_case[0] + 1), Test_Case_executeResult_col_no+1, "失败","red",apiName)
if not response:
error("请求接口系统无法连接")
# break
test_results_for_html_report.append(
(test_case_name,baseurl, body, response, int((end_time - start_time) * 1000), assert_content, "失败"))
else:
test_results_for_html_report.append(
(test_case_name,response.url, body, response.text, int((end_time - start_time) * 1000), assert_content, "失败"))
flag = False
info("接口请求的耗时为%d 毫秒" %((end_time - start_time)*1000))
excel_instance_for_result_write.set_sheet_by_index(1)
if flag:
excel_instance_for_result_write.write_cell_value(int(test_sheet_name[0]) + 1, Test_Suit_execute_result_col_no+1, "成功","green")
else:
excel_instance_for_result_write.write_cell_value(int(test_sheet_name[0]) + 1, Test_Suit_execute_result_col_no+1, "失败","red")
excel_instance_for_result_write.write_current_time(int(test_sheet_name[0]) + 1, Test_Suit_execute_time_col_no+1)
# print(global_vars)
html_name = '接口测试报告'
report_html(test_results_for_html_report, html_name)

20191011-构建我们公司自己的自动化接口测试框架-testrun最重要的模块的更多相关文章

  1. 20191011-构建我们公司自己的自动化接口测试框架-Action的request方法封装

    Action模块 封装接口request方法,根据传入的参数调用不同的请求方法,因为项目特色,我们公司的接口都是get和post方法,所以仅仅封装了get和post方法: import request ...

  2. 20191011-构建我们公司自己的自动化接口测试框架-Util的ClearData模块

    cleardata模块主要是用于在每次测试之前清除历史执行痕迹,主要代码如下: from Util.ParseExcel import * from ProVar.ProjConfigVar impo ...

  3. 20191011-构建我们公司自己的自动化接口测试框架-Util的AssertResult模块

    AssertResult主要就是进行结果断言的了,因为断言结果分2种情况,一种是断言词,一种是断言sheet,如果涉及断言sheet,则需要操作excel到对应的断言表断言所有的字段并且书写断言结果主 ...

  4. 20191011-构建我们公司自己的自动化接口测试框架-Util的TestDataHandler模块

    TestDataHandler模块主要是做测试数据的处理,包括转换数据格式和变量参数处理转换数据格式函数: data是数据,data以$()的方式识别变量,如果请求的数据有变量,则将变量用global ...

  5. 20191011-构建我们公司自己的自动化接口测试框架-Util的getTestSuite模块

    getTestSuite主要是用于在testData里面获取测试集以及对应的测试数据,包括2个主要的方法,一个是获取测试集,一个是获取测试集里面要执行的测试用例 获取测试集方法: from Util. ...

  6. 20191011-构建我们公司自己的自动化接口测试框架-Util的htmlreport模块

    生成htmlreport的模块是我在网上随意找的一个版本,主要生成的report包括接口名称,接口url,请求数据,响应数据,断言词,断言结果等 具体的htmlreport代码如下: # -*- en ...

  7. 20191011-构建我们公司自己的自动化接口测试框架-Util的读取excel常用方法模块

    包括获取excel的sheet名字,设定excel的sheet,读excel,写excel等常规操作. from openpyxl import Workbook from openpyxl impo ...

  8. 20191011-构建我们公司自己的自动化接口测试框架-ProVar模块

    ProVar模块主要定义测试数据所在目录,以及定义变量和测试数据excel里面的column对应这样后续在进行excel操作的时候直接使用变量即可进行操作,后期excel的column有增删的时候,修 ...

  9. 20191011-构建我们公司自己的自动化接口测试框架-Config配置

    Config模块主要是为了存放的一些其他配置等的一个目录,当前目录存放日志配置文件 ################################################ [loggers] ...

随机推荐

  1. 分布式的一致性(分布式事物)-------2PC详述

    英文名:Two Phase Commit(2PC) 算法目的:实现分布式事物 算法概述: 有两类节点: -----协调者 -----事务参与者 流程阶段: -----请求阶段 -----提交阶段 算法 ...

  2. [提权]Windows COM组件提权漏洞 (CVE-2017-0213)

    0x01 简介 COM组件是微软开发的一种新软件开发技术,在这个COM框架的下,可以开发出多功能的组件,可以根据自己的需求进行定制开发,替换旧的组件,多个功能组件组合到一起,从而形成了一个复杂的定制化 ...

  3. linux下查看memcache是否正常

    1   查看memcache启动1.1      在xshell中查看memcache是否启动在xshell中输入ps -ef | grep mem,显示结果如下,说明memcache已经启动. [r ...

  4. socket.io 消息发送

    socket.io学习笔记 1.服务器信息传输: 2.不分组,数据传输: 3.分组数据传输: 4.Socket.io难点大放送(暂时没有搞定): 服务器信息传输 1. // 发送到当前请求套接字客户端 ...

  5. chrome dev

    chrome://plugins 为什么无法打开? Chrome插件问答 2018-03-02 13:34     最后又很多网友在我们 chrome插件 网反应说chrome://plugins 无 ...

  6. 微信小程序测试检查点

    1.权限测试 需要检查以下几种情况下微信用户访问的权限1)未授权微信登录小程序未授权时,一般使用一些业务功能的时候,都会弹出提醒:先授权再操作对应功能.或在提交数据到后台的时候,会提示补充相关身份信息 ...

  7. 不同三维引擎渲染IFC数据效果对比

  8. osg::NodeVisitor osg3.4.0

    x:-89.4588 y:-12.1245 z:-11.7807x:-89.4588 y:-6.44823 z:-11.7807x:-89.2164 y:-9.07239 z:-11.811x:-89 ...

  9. 阶段5 3.微服务项目【学成在线】_day18 用户授权_19-微服务之间认证-Feign 拦截器

    4.2 Feign 拦截器 4.2.1 定义Feign拦截器 微服务之间使用feign进行远程调用,采用feign拦截器实现远程调用携带JWT. 在common工程添加依赖: <dependen ...

  10. Mac PhpStorm 2017 破解

    官网下载链接: https://www.jetbrains.com/zh/phpstorm/specials/phpstorm/phpstorm.html?utm_source=baidu&u ...