关键词:
import logging
filename = "../report/test_case_run.log"
logging.basicConfig(level=logging.INFO,
format=‘%(asctime)s %(levelname)s1 %(filename)s [line:%(lineno)d] %(message)s‘,
datefmt=‘%a, %d %b %Y %H:%M:%S‘,
filename=filename,
filemode=‘w‘)
|
pip install requests |
import requests
from untils. log_trace import *
#发送get请求
def get_request(url,data=None,headers=None):
res = requests.get(url=url,data=data,headers=headers)
return res
#发送post请求
def post_request(url,data,headers=None):
res = requests.post(url=url,data=data,headers=headers)
return res
#发送delete请求
def del_request(url,data=None,headers=None):
res = requests.delete(url,data=data)
return res
#发送put请求
def put_request(url,data,headers=None):
pass
def send_request(method,url,data=None,headers=None):
try:
logging.info(headers)
if headers:
if method == "GET":
return get_request(url,data,headers=headers)
if method == "POST":
return post_request(url,data=data,headers=headers)
if method == "DELETE":
return del_request(url,data=data,headers=headers)
#put使用频率低,暂时不写
if method == "PUT":
return put_request(url,data=data,headers=headers)
else:
logging.info("Header is null")
except Exception as e:
logging.info("send request fail:%s"%e)
|
#coding:utf-8
from untils.send_request import send_request
def test_send_request():
url="http://127.0.0.1:9000/articles/"
headers =
"X-Token":"0a6db4e59c7fff2b2b94a297e2e5632e"
res = send_request("GET",url,headers=headers)
print(res.json())
if __name__ == "__main__":
test_send_request()
|
/usr/bin/python3.6 /home/stephen/IdeaProjects/apitest/untils/untils_test.py
‘status‘: ‘BS.200‘, ‘all_titles‘: ‘amy1‘: ‘alive‘, ‘modifytest‘: ‘alive‘, ‘addTest‘: ‘alive‘, ‘msg‘: ‘query articles sucess.‘
Process finished with exit code 0
|
pip install xlrd
pip install xluntils
|
#coding:utf-8
import xlrd
from untils.log_trace import *
from xlutils.copy import copy
from untils.load_conf import excel_config
class excel_tool():
def __init__(self,excel_name):
self.curr_excel = xlrd.open_workbook(excel_name)
self.table = self.curr_excel.sheet_by_index(0)
#print(self.table.cell(1,1).value)
#实例化excel_config
self.config = excel_config()
self.rows = self.table.nrows
self.excel_name = excel_name
#获取用例编号
def get_caseno(self,row):
caseno = self.table.cell(row,self.config.caseno_col()).value
if caseno:
return caseno
else:
logging.info("case no is null")
return None
#获取用例名称
def get_casename(self,row):
casename = self.table.cell(row,self.config.casename_col()).value
return casename
#获取是否运行标志
def get_runflag(self,row):
run_flag = self.table.cell(row,self.config.isrun_col()).value
return run_flag
#获取用例级别
def get_caselevel(self,row):
caselevel = self.table.cell(row,self.config.level_col()).value
return caselevel
#获取请求url
def get_caseurl(self,row):
caseurl = self.table.cell(row,self.config.caseurl_col()).value
return caseurl
#获取请求body
#获取请求body
def get_casebody(self,row):
case_body = self.table.cell(row,self.config.casebody_col()).value
return case_body
#获取header
def get_headerflag(self,row):
headerflag = self.table.cell(row,self.config.header_col()).value
return headerflag
#获取coocikes
def get_cookiesflag(self,row):
cookiesflag = self.table.cell(row,self.config.cookies_col()).value
return cookiesflag
#获取请求类型
def get_methodtype(self,row):
method_type = self.table.cell(row,self.config.reqtype_col()).value
return method_type
#获取预期结果
def get_expectres(self,row):
expect_res = self.table.cell(row,self.config.expectresult_col()).value
return expect_res
#获取测试结果
def get_testres(self,row):
test_res= self.table.cell(row,self.config.testresult_col()).value
return test_res
#获取操作符
def get_operator(self,row):
operator = self.table.cell(row,self.config.test_operator_col()).value
return operator
#回写测试结果到excel
def write_testres(self,row,value):
wbook = copy(xlrd.open_workbook(self.excel_name))
sheet = wbook.get_sheet(0)
sheet.write(row, self.config.testresult_col(), value)
wbook.save(self.excel_name)
#回写实际结果
def write_actualres(self,row,value):
wbook = copy(xlrd.open_workbook(self.excel_name))
sheet = wbook.get_sheet(0)
sheet.write(row, self.config.actualresult_col(), value)
wbook.save(self.excel_name) |
#coding:utf-8
from untils.excel_tool import excel_tool
from untils.send_request import send_request
from untils.log_trace import *
from untils.check_result import CheckResult
import json
headers =
"X-Token":"0a6db4e59c7fff2b2b94a297e2e5632e"
class runner():
def __init__(self):
self.excel = excel_tool("../testcase/test.xls")
self.check = CheckResult()
def join_case(self):
global skip_list,sucess_list,failed_list,skip_list
sucess_list = []
sucess_list = []
failed_list = []
skip_list = []
for row in range(1,self.excel.rows):
no = self.excel.get_caseno(row)
url = self.excel.get_caseurl(row)
isrun = self.excel.get_runflag(row)
name = self.excel.get_casename(row)
level = self.excel.get_caselevel(row)
data = self.excel.get_casebody(row)
expect_res = self.excel.get_expectres(row)
method = self.excel.get_methodtype(row)
hasheader = self.excel.get_headerflag(row)
operator = self.excel.get_operator(row)
if isrun == "Y":
logging.info("Begin to run test case : %s,case number :%s" %(name,no))
logging.info("Request method type is :%s" %method)
logging.info("Request URL:%s" %url)
logging.info("Request Body:%s" %json.dumps(json.loads(data),sort_keys=True,indent=2))
res = send_request(method,url,data=data,headers=headers)
is_sucess = self.check.cmpdict(eval(expect_res),eval(res.text),operator)
print(is_sucess)
if is_sucess:
sucess_list.append(name)
#回写测试结果
self.excel.write_testres(row,"pass")
#回写实际结果
self.excel.write_actualres(row,res.text)
logging.info("Test case %s run sucess." %name)
else:
failed_list.append(name)
print("fail",is_sucess)
#回写测试结果
self.excel.write_testres(row,"failed")
#回写实际结果
self.excel.write_actualres(row,res.text)
logging.error("Test case %s run fail." %name)
logging.info("Response is:%s" %json.dumps(res.json(),sort_keys=True,indent=2))
else:
skip_list.append(name)
self.excel.write_testres(row,"skipped")
def sum(self):
total = len(sucess_list)+len(failed_list) + len(skip_list)
failed = len(failed_list)
sucess = len(sucess_list)
logging.info("-----------------------------------------------------------")
logging.info("本次一共运行:%s 个用例" %total)
logging.info("本次运行通过:%s 个用例" %sucess)
logging.info("本次运行跳过:%s 个用例" %len(skip_list))
logging.info("跳过的用例:%s" %skip_list)
logging.info("-----------------------------------------------------------")
|
logging.error("%s is not equal to %s" %(expect[key],self.dict_value(key,actual)))
return False
if equal == "notequal":
for key in expect.keys():
if key != self.dict_value(key,actual):
logging.info("%s is not equal to %s" %(expect[key],self.dict_value(key,actual)))
return True
else:
logging.error("%s is equal to %s" %(expect[key],self.dict_value(key,actual)))
return False
else:
logging.error("Operator :%s is not support now,you can define it in file[check_result.py]" %equal)
else:
logging.error("Expect or actual result is not dict,check it in excel. ")
|
from untils.run_main import runner
if __name__ == "__main__":
#test_send_request()
runner = runner()
runner.join_case()
runner.sum()
|
接口自动化测试框架(java实现)(代码片段)
需求分析需求点需求分析通过yaml配置接口操作和用例后续新增接口和测试用例只需要编写yaml文件即可实现。可以支持接口间的参数传递具有参数依赖的接口可以进行变量的抽取和参数赋值。支持全局、用例维度的变量存储比如... 查看详情
unittest与数据驱动及测试框架设计模式(代码片段)
...过直接导入UnitTest包即可实现:importunittest是python库自带的自动化测试框架主要用于管理测试用例和实现数据驱动 在nuittest中所有的测试用例都是基于test_基于前缀来实现的如果不写的话那么它只是一个普通的函数unitest会自动... 查看详情
熬夜整理的自动化测试框架结构图,值的一看
自动化测试框架结构图目录自动化测试框架结构图1、接口自动化测试框架设计图2、接口自动化执行设计图3、API自动化平台框架设计图4、UI自动化测试框架设计图5、接口+UI自动化测试框架设计图6、Appium移动端自动化测试框架... 查看详情
api接口自动化测试框架搭建-详细设计&框架设计
...细分析,主要有下:功能说明使用Unittest框架开源自动化测试框架,直接使用批量或指定用例运行Unitt 查看详情
接口自动化测试选型-httprunner
...通用测试框架,只需编写维护一份YAML/JSON脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。1.3 httprunner设计理念充分复用优秀的开源项目,不追求重复造轮子,而是将强大的轮子组装成战车... 查看详情
疫情期间的学习与收获
...高测试覆盖度(广度、深度)的方法思考与梳理2、接口自动化测试知识学习内容:(1)结合互联网资料及目前公司的接口自动化测试框架,学习接口自动化测试技术,测试用例设计等(2)可外网下载robot工具进行练习;(常见... 查看详情
如何基于yaml设计接口自动化测试框架?看完秒会(代码片段)
在设计自动化测试框架的时候,我们会经常将测试数据保存在外部的文件(如Excel、YAML、CSV)或者数据库中,实现脚本与数据解耦,方便后期维护。目前非常多的自动化测试框架采用通过Excel或者YAML文件直接... 查看详情
python3+requests搭建接口自动化测试框架(代码片段)
目录一、接口自动化的意义(为什么做这个框架)二、准备工作三、框架流程及逻辑四、各模块介绍五、具体使用一、接口自动化的意义(为什么做这个框架) 新版本上线时之前版本的功能需要进行回归... 查看详情
接口自动化测试-接口封装思想
目录一、接口测试封装思想二、测试框架三、架构管理一、接口测试封装思想 配置--根据配置文件获取初始配置和依赖 接口封装--1、封装接口调动进行抽象封装 --2、类似PageObject效果 业务流程--1、数据初... 查看详情
接口自动化测试-接口封装思想
目录一、接口测试封装思想二、测试框架三、架构管理一、接口测试封装思想 配置--根据配置文件获取初始配置和依赖 接口封装--1、封装接口调动进行抽象封装 --2、类似PageObject效果 业务流程--1、数据初... 查看详情
接口自动化--概述
最近接触了接口自动化,经过大约一个月的时间,利用工作之余,借助公司的项目,搭建了接口自动化框架(此框架是要实现脚本与数据的完全分离)。整个过程中,最重要的就是实现思路,思路有了,实现起来还是不困难的。... 查看详情
1-1接口自动化测试框架从设计到开发
...开发工程师,但是想成为测试开发工程师必须会一种接口自动化框架。必须从设计框架,开发框架,重构框架做起。要做到这些内容我们必须从以后这几个路线开始:1.接口基础(HTTP接口熟悉,常见接口介绍,接口测试工具的使... 查看详情
接口自动化艰辛之路---
...hapeL/p/9188495.html前言:上篇文章python3+requests+unittest:接口自动化测试(一):https://www.cnblogs.com/shapeL/p/9179484.html ,已经介绍了基于unittest框架的实现接口自动化,但是也存在一些问题,比如最明显的测试数据和业务没有区分... 查看详情
python+requests接口自动化测试框架实例详解教程
...//my.oschina.net/u/3041656/blog/820023摘要:python+requests实现的接口自动化框架详细教程前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组... 查看详情
python自动化教程jmeter性能测试
参考技术Apython自动化教程Jmeter性能测试25套高级软件测试,性能测试,功能测试,自动化测试,接口测试,移动端测试,手机测试,WEB测试,渗透测试,测试用例设计,黑盒测试,白盒测试,UFT高级测试,Android测试,Selenium3自... 查看详情
第三章,平台开发设计与实现
在第二章中我们简单地介绍了接口自动化平台的基本功能,主要包括以下几个方面:(1)接口文档管理功能:管理接口信息,包括增,删,改,查等。(2)用例管理功能:新建,展示,查询,删除,运行测试用例... 查看详情
如何做好接口测试?
参考技术Asgbtmy:基于selenium的自动化框架开发,我主要是想问一下,你的框架除了前台的自动化,后台的数据的测试是否集成在你的测试框架中?小刀:你好,个人理解的你所说的后台的数据的测试是指的是对数据的校验,不知... 查看详情
appiumpo模式ui自动化测试框架——设计与实践(代码片段)
(阅读目录) 1.目的 相信做过测试的同学都听说过自动化测试,而UI自动化无论何时对测试来说都是比较吸引人的存在。相较于接口自动化来说它可以最大程度的模拟真实用户的日常操作与特定业务场景的模拟,那么存在... 查看详情