一、为什么搭建测试框架
搭建测试框架更具有灵活性,能够封装出通用的测试脚本,而postman这类工具生成的脚本只适用于当前一个接口;框架便于管理脚本,当接口不断增多时可存放代码仓库;框架支持按需驱动,自动化执行。
二、如何搭建测试框架
1、技术选型
根据技术功底选择一门自己感兴趣的语言,不必根据开发的技术栈来选择。首先,开发工程师和测试工程师的关注点是不相同的,开发需要设计技术方案,通过代码实现产品功能同时还要关注高并发、分布式、代码安全性、可靠性等,测试工程师关注产品交付的质量。其次,开发在技术栈的使用广度和使用频度远远超过测试,除非具有强大的知识储备,否则不要强行炫技,使用自己熟悉的技术栈完成脚本的编写即可
2、框架设计
工具化思维,如postman这款接口测试工具,只需要填写不同的url和params。设计框架时也需要将通用的、重叠的封装出来,抽象到框架与业务无关,将url和params变化的进行参数化。
3、技术实现
class Common(): def init(self,domain): self.domain=domain
def post(self,uri,datas,header):
url=self.domain+uri
res=requests.post(url,data=datas,headers=header)
return res
def get(self,uri,params,header):
url=self.domain+uri
if len(params)>0:
res=requests.get(url,params=params,headers=header)
else:
res=requests.get(url,headers=header)
#
from test import Common
header = { ‘User-Agent’:’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36’ } datas={ “log”:”spiderman”, “pwd”:””, “wp-submi”:”登录”, “redirect_to”:”https://wordpress-edu-3autumn.localprod.oc.forchange.cn“, “testcookie”:1
} uri=’/wp-login.php’ domain=’https://wordpress-edu-3autumn.localprod.oc.forchange.cn‘ comm=Common(domain) res=comm.post(uri,datas,header) print(res.status_code) print(res.text)
<a name="66P4w"></a>
#### 2、unitest框架支持断言、顺序执行
[https://www.imooc.com/article/21104](https://www.imooc.com/article/21104)
from test import Common import unittest
class logintest(unittest.TestCase): def test1(self): header= { ‘User-Agent’:’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36’ } datas={ “log”:”spiderman”, “pwd”:””, “wp-submi”:”登录”, “redirect_to”:”https://wordpress-edu-3autumn.localprod.oc.forchange.cn“, “testcookie”:1
} uri=’/wp-login.php’ domain=’https://wordpress-edu-3autumn.localprod.oc.forchange.cn‘ comm=Common(domain) res=comm.post(uri,datas,header) print(res.status_code) self.assertEqual(res.status_code,200)
def test2(self):
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
}
datas = {
"log": "spiderman",
"pwd": "",
"wp-submi": "登录",
"redirect_to": "https://wordpress-edu-3autumn.localprod.oc.forchange.cn",
"testcookie": 1
}
uri = '/wp-login.php'
domain = 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn'
comm = Common(domain)
res = comm.post(uri, datas, header)
print(res.status_code)
self.assertEqual(res.status_code, 200)
if name == ‘main‘: suite = unittest.TestSuite() suite.addTest(logintest(‘test1’)) suite.addTest(logintest(‘test2’)) unittest.TextTestRunner().run(suite)
#
import requests
class Common(): def init(self,domain): self.domain=domain
def post(self,uri,datas,header):
url=self.domain+uri
res=requests.post(url,data=datas,headers=header)
return res
def get(self,uri,params,header):
url=self.domain+uri
if len(params)>0:
res=requests.get(url,params=params,headers=header)
else:
res=requests.get(url,headers=header)
```