测试过程如下:
1、接口测试项目先向测试数据库中插入测试数据(zhangsan的个人信息)
2、调用被测试系统接口(传参username="zhangsan")
3、系统接口根据传参(username="zhangsan")向测试数据库中进行查询并得到zhangsan的个人信息
4、将查询结果组装成一定格式的数据,并返回给被调用者
5、通过单元测试框架断言接口返回数据(zhangsan的个人信息),并生成测试报告
为了使正式数据库的数据不被污染,应使用独立的测试数据库。
举例:接口测试
import requests #查询发布会接口 url = "http://127.0.0.1:8000/api/get_event_list/" r = requests.get(url,params = {'eid':'1'}) result = r.json() print(result) assert result['status'] == 200 assert result['message'] == "success" assert result['data']['name'] == "xx 产品发布会" assert result['data']['address'] == "北京林匹克公园水立方" assert result['data']['start_time'] == "2016-10-15T18:00:00"
因为“发布会查询接口” 是 GET 类型, 所以, 通过 requests 库的 get()方法调用, 第一个参数为调用接口
的 URL 地址, params 设置接口的数, 参数以字典形式组织。
json()方法可以将接口返回的 json 格式的数据转化为字典。
接下来就是通过 assert 语句对接字典中的数据进行断言。分别断言 status、 message 和 data 的相关数据等
举例:接口自动化测试
使用 unittest 单元测试框架开发接口测试用例。
#-*-coding:utf-8-*- import unittest import requests __author__ = 'Administrator' class GetEventListTest(unittest.TestCase): '''查询发布会接口测试''' def setUp(self): self.url = "http://127.0.0.1:8000/api/get_event_list/" def test_get_event_null(self): '''发布会 id 为空''' r = requests.get(self.url, params={'eid':''}) result = r.json() print(result) self.assertEqual(result['status'], 10021) self.assertEqual(result['message'], "parameter error") def test_get_event_success(self): '''发布会 id 为 1, 查询成功''' r = requests.get(self.url, params={'eid':'1'}) result = r.json() print(result) self.assertEqual(result['status'],200) self.assertEqual(result['message'], "success") self.assertEqual(result['data']['name'], "xx 产品发布会") self.assertEqual(result['data']['address'], "北京林匹克公园水立方") self.assertEqual(result['data']['start_time'], "2016-10-15T18:00:00") if __name__ == '__main__': unittest.main()
import unittest from count import Calculator class CountTest(unittest.TestCase): def setUp(self): self.cal = Calculator(8, 4) def tearDown(self): pass def test_add(self): result = self.cal.add() self.assertEqual(result,12) def test_sub(self): result = self.cal.sub() self.assertEqual(result,4) def test_mul(self): result = self.cal.mul() self.assertEqual(result,32) def test_div(self): result = self.cal.div() self.assertEqual(result,2) if __name__ == "__main__": #unittest.main() # 构造测试集 suite = unittest.TestSuite() suite.addTest(CountTest("test_add")) suite.addTest(CountTest("test_sub")) suite.addTest(CountTest("test_mul")) suite.addTest(CountTest("test_div")) # 执行测试 runner = unittest.TextTestRunner() runner.run(suite)
单元测试用例。
首先, 通过 import 导入 unittest 单元测试框架。
创建 CountTest 类继承 unittest.TestCase 类。
setUp()和 tearDown()在单元测试框架中比较特别, 它们分别在每一个测试用例的开始和结束执行。setUp()
方法用于测试用例执行前的初始化工作, 例如初始化变量、 生成数据库测试数据、 打开浏览器等。 tearDown()
方法与 setUp()方法相呼应, 用于测试用例执行之后的善后工作, 例如清除数据库测试数据、 关闭文件、 关闭
浏览器等。
unittest 要求测试方法必须以“test” 开头。 例如, test_add、 test_sub 等。
接下来, 调用 unittest.TestSuite()类中的 addTest()方法向测试套件中添加测试用例。 简单的可以将测试套
件理解成运行测试用例的集合。
通过 unittest.TextTestRunner()类中的 run()方法运行测试套件中的测试用例。
如果想默认运行当前测试文件下的所有测试用例, 可以直接使用 unittest.main()方法。 那么 main()方法在
查找测试用例时按照两个规则。 首先, 该测试类必须继承 unittest.TestCase 类; 其次, 该测试类下面的方法必
须以“test” 开头。
接口自动化测试框架实现 :
关于接口自动化测试, unittest 已经帮我们做了大部分工作, 接下来只需要集成数据库操作, 以及
HTMLTestRunner 测试报告生成扩展即可 .