[url=]0[/url]
接口自动化框架设计
背景:因为把传入接口参数、组建测试用例、执行测试用例和发送报告,都放入一
个.py文件对于接口的使用非常不灵活就需要数据和接业务进行分离让代码之间的
耦合性降低。和实现接口的分层管理,所以需要对代码进行封装处理。
接口分层思想:
cms_ api:组建并发送接口请求
config:放所有接口的入参信息
report:放置运行所有测试用例生成的报告
run:自动加载所有的测试用例、并且运行
testcase: 继承unittest单元测试框架、 组建接口测试用例
utils: 工具类、发送邮件和生成报告模块
1、基础层
'''此模块定义了所有接口的入参'''
# 定义接口的入参
login_url='http://cms.duoceshi.cn/cms/manage/loginJump.do'
login_data={
'userAccount':'admin',
'loginPwd':123456
}
login_header={'Content-Type':'application/x-www-form-urlencoded'}
# 定义查询用户接口入参
chaxun_url='http://cms.duoceshi.cn/cms/manage/queryUserList.do'
chaxun_data={
'searchValue':'ccc',
'page':1
}
chaxun_header={'Content-Type':'application/x-www-form-urlencoded'}
2、接口请求层''此模块用来组建接口请求'''
import requests
from config.config import *
class Cms:
def __init__(self):
self.session=requests.Session()
def login(self):
'''定义登录接口'''
response=self.session.post(url=login_url,data=login_data,headers=login_header)
return response.json()
def chacun(self):
'''查询用户接口'''
response=self.session.post(url=chaxun_url,data=chaxun_data,headers=chaxun_header)
return response.json()
if __name__ == '__main__':
c=Cms()
print(c.login())
print(c.chacun())
3、测试用例层'''此模块用于组建测试用例'''
import unittest
from cms_api.cms_api import Cms
class Cms_Testcase(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.cms=Cms() # 在类开始里面创建Cms这个类的对象(使其唯一)
def test001_login(self):
result=self.cms.login()
'''使用第三种断言'''
self.assertEqual(result['msg'],'登录成功!')
def test002_chaxun(self):
result=self.cms.chacun()
self.assertEqual(result['msg'],'查询用户成功!')
if __name__ == '__main__':
unittest.main()
4、运行层import time
import unittest
from utils.HTMLTestRunner3_New import HTMLTestRunner
from utils.mail import SendMail
# 定义生成报告的路径和文件名称
now=time.strftime('%Y-%m-%d-%H-%M-%S')
filename=r'D:\PycharmProjects\dcs8_cms\report'+'\\'+str(now)+'_api_report.html'
def auto_run():
start_dir=r'D:\PycharmProjects\dcs8_cms\testcase'
discover=unittest.defaultTestLoader.discover(start_dir=start_dir,
pattern='cms*.py')
f=open(filename,'wb')
runer=HTMLTestRunner(stream=f,title='cms接口自动化测试报告',
description='执行情况如下',
tester='多测师')
runer.run(discover)
f.close()
def sendMail():
'''封装一个发送邮件的函数'''
send=SendMail(send_msg=filename,attachment=filename)
send.send_mail()
if __name__ == '__main__':
auto_run()
sendMail()
5、报告层存放运行用例后的执行报告
6,公共层
存放一些公共的基类
|
|
|
|