搭建测试框架 - 图1

一、为什么搭建测试框架

搭建测试框架更具有灵活性,能够封装出通用的测试脚本,而postman这类工具生成的脚本只适用于当前一个接口;框架便于管理脚本,当接口不断增多时可存放代码仓库;框架支持按需驱动,自动化执行。

二、如何搭建测试框架

1、技术选型

根据技术功底选择一门自己感兴趣的语言,不必根据开发的技术栈来选择。首先,开发工程师和测试工程师的关注点是不相同的,开发需要设计技术方案,通过代码实现产品功能同时还要关注高并发、分布式、代码安全性、可靠性等,测试工程师关注产品交付的质量。其次,开发在技术栈的使用广度和使用频度远远超过测试,除非具有强大的知识储备,否则不要强行炫技,使用自己熟悉的技术栈完成脚本的编写即可

2、框架设计

工具化思维,如postman这款接口测试工具,只需要填写不同的url和params。设计框架时也需要将通用的、重叠的封装出来,抽象到框架与业务无关,将url和params变化的进行参数化。

3、技术实现

  • 封装通用的重复的方法
  • 第三方库的调用封装
  • 数据库的增删改封装
  • 运用unitest自动化执行

    三、简单实践

    1、封装get、post方法

    ``` import requests

class Common(): def init(self,domain): self.domain=domain

  1. def post(self,uri,datas,header):
  2. url=self.domain+uri
  3. res=requests.post(url,data=datas,headers=header)
  4. return res
  5. def get(self,uri,params,header):
  6. url=self.domain+uri
  7. if len(params)>0:
  8. res=requests.get(url,params=params,headers=header)
  9. else:
  10. 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)

  1. <a name="66P4w"></a>
  2. #### 2、unitest框架支持断言、顺序执行
  3. [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)

  1. def test2(self):
  2. header = {
  3. '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'
  4. }
  5. datas = {
  6. "log": "spiderman",
  7. "pwd": "",
  8. "wp-submi": "登录",
  9. "redirect_to": "https://wordpress-edu-3autumn.localprod.oc.forchange.cn",
  10. "testcookie": 1
  11. }
  12. uri = '/wp-login.php'
  13. domain = 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn'
  14. comm = Common(domain)
  15. res = comm.post(uri, datas, header)
  16. print(res.status_code)
  17. 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

  1. def post(self,uri,datas,header):
  2. url=self.domain+uri
  3. res=requests.post(url,data=datas,headers=header)
  4. return res
  5. def get(self,uri,params,header):
  6. url=self.domain+uri
  7. if len(params)>0:
  8. res=requests.get(url,params=params,headers=header)
  9. else:
  10. res=requests.get(url,headers=header)

```