接⼝⾃动化测试框架完整搭建python+unittest+requests+ddt
python怎么读入excel接⼝⾃动化框架
⼀、⾸先废话不多说,直接开始讲解⼀下整个框架的⽬录结构,本次内容着重讲解测试⽤例类,只要掌握了测试⽤例类和接⼝测试⽤例怎么写就可以运⽤此框架。(需要⼀些python基础,能看的懂基本代码)
common⽬录
2.handle_data处理excel⽤例中需要替换的参数,⽤来存储临时变量,和需要替换的excel⽤例中需要替换的字符串(注意存放临时变量时int类型应转换成str类型存放)
3.handle_db是连接数据库(mysql)处理需要进⾏数据库校验的模块,封装了三个⽅法,分别是:获取到查询的第⼀条数据、获取到查询的所有数据、获取查询到的数据条数
4.handle_request是⽤来发送请求的(⽀持cookie和token)
5.handle_webservice是⽤来发送webservice类型接⼝的请求(⽤到的⽐较少可以忽略此模块)
9.send_email是发送测试报告邮件模块
comf配置⽂件
1.⽇志等级和测试报告名称,项⽬地址,账号,和数据库连接信息修改的地⽅
data存放excel⽤例数据
library存放⼀些下载的第三⽅库
1.ddt数据驱动的
2.HTMLTestRunner⽣成测试报告的模块
log存放⽇志
log存放⽇志
查看⽇志,⽇志是轮转的
reports存放测试报告
在此⽂件夹下查看报告
testcases存放⽤例类的模块
所有的测试⽤例类必须放在此模块
run.py测试运⾏程序
整个项⽬只需要运⾏此模块就可以
⼆、下⾯我们来详细介绍下excel中接⼝⽤例该怎么写
这⾥注意下接⼝传⼊参数data⾥的⽤例1和⽤例2中的mobile_phone的传参为什么是#phone#,为什么不传⼊具体⼿机号,因为传⼊具体的⼿机号,测试⽤例只能运⾏⼀次,需要⼿动修改这⾥的测试⽤例数据在进⾏运⾏⽐较。那我们该采⽤什么办法呢,在代码⾥⾯随机⽣成⼿机号进⾏替换(后⾯代码中会指出),怎么替换呢⾸先判断每条⽤例数据中是否有#phone#,如果有就⽤⽣成的随机⼿机号进⾏替换,反之,就直接将接⼝参数传⼊接⼝中进⾏请求,获取结果
还需要注意的是将表单名称进⾏修改,如上图中的下⽅,名称随意取
讲完了excel⽤例,接⼝⽤例类怎么写(python基础语法就不多说)我们只讲接⼝的excel⽤例数据读取,请求接⼝,在进⾏断⾔,预期结果和实际结果进⾏⽐对
# -*- coding: utf-8 -*-
# @Time    : 2019/12/5 9:23
# @File    : test_01_login__register.py
# @Software: PyCharm
import  unittest
import  random
from library.ddt import ddt,data
from  adexcel import read_excel
ants import URL_DIR
fig import conf
from common.handle_request import token_http,cookie_http
from  logger import Log
from  common.handle_db import db
@ddt
class Testregister(unittest.TestCase):
#传⼊excel⽤例所在的路径和表单名
excel=read_excel(URL_DIR,"register")
#读取⽤例数据
ad_data()
ad_data()
@data(*cases)
def test_register(self,case):
# ------第⼀步:准备⽤例数据------------
# 获取请求的参数
# 增加判断,这⾥判断是否有请求的参数需要替换
if"#phone#"in case["data"]:
# ⽣成⼿机号
phone=self.random_phone()
# 进⾏替换
case["data"]=case["data"].replace("#phone#",phone)
data=eval(case["data"])
# 获取请求的⽅法
method=case["method"]
# 获取请求的地址(配置⽂件中读取的路径+excel中的读取路径做拼接)
("url_project","url")+case["url"]
# 获取当前⽤例所在⾏
row=case["case_id"]+1
# 获取请求头(配置⽂件中读取请求头)
headers=("url_project","headers"))
# 获取预期结果
expected=eval(case["expected"])
# ------第⼆步:发送请求到接⼝,获取实际结果--------
#发送请求(传⼊url、请求⽅法、请求参数,请求头、)
res1=token_http.send(url=url,method=method,json=data,headers=headers) #获取实际结果
res=res1.json()
# -------第三步:⽐对预期结果和实际结果-----
try:
#断⾔接⼝返回的code和预期结果中的code是否⼀致
self.assertEqual(eval(expected["code"]),res["code"])
#断⾔接⼝返回的msg和预期结果中的msg是否⼀致
self.assertEqual(expected["msg"],res["msg"])
#判断如果请求成功就到处数据库中去查询是否有该数据
if res["msg"]=="ok":
# 去数据库查询当前账号是否存在
sql ="SELECT * ber WHERE mobile_phone ={}".format(phone) # 获取数据库中有没有该⽤户信息,(⽤handle_db封装好的⽅法)
count=unt(sql)
# 对数据库中返回的数据做断⾔,判断数据库中是否有⼀条数据
self.assertEqual(1,count)
except AssertionError as e :
#回写结果到excel中的result列
#打印到控制台
print("预期结果:{}".format(expected))
print("实际结果;{}".format(res))
#将错误信息打印到⽇志
Log.info("⽤例:{}--------->未通过".format(case["title"]))
<(e)
#如果有错误信息抛出错误信息
raise  e
else:
#回写结果到excel中的result列
Log.info("⽤例:{}--------->通过".format(case["title"]))
#随机⽣成⼿机号⽅法
@staticmethod
def random_phone():
phone="188"
for i in range(8):
phone+=str(random.randint(0,9))
phone+=str(random.randint(0,9))
return phone
代码中部分问题
1.上⾯的URL_DIR是已经拼接好的路径导⼊进来的,在contants下URL_DIR⾥修改
2.请求地址前半部分读取conf.ini⽂件中的url(建议将接⼝中相同的请求地址放在此地⽅,这样就不⽤每次在excel中url⾥写⼊完整的接⼝地址)
3.请求头存放在conf.ini⽂件的headers⽤字典的⽅式存放
4.数据库校验部分需要先连接数据库,在conf.ini配置⽂件中填写host主机,user⽤户,password密码,port端⼝号(注:这⾥只⽀持,mysql数据库)
请注意:框架中有许多的第三⽅库需要⾃⼰安装

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。