测试过程如下:

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 语句对接字典中的数据进行断言。分别断言 statusmessage 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_addtest_sub 等。
  接下来, 调用 unittest.TestSuite()类中的 addTest()方法向测试套件中添加测试用例。 简单的可以将测试套
件理解成运行测试用例的集合。
  通过 unittest.TextTestRunner()类中的 run()方法运行测试套件中的测试用例。
  如果想默认运行当前测试文件下的所有测试用例, 可以直接使用 unittest.main()方法。 那么 main()方法在
查找测试用例时按照两个规则。 首先, 该测试类必须继承 unittest.TestCase 类; 其次, 该测试类下面的方法必
须以“test” 开头。

接口自动化测试框架实现 :

  关于接口自动化测试, unittest 已经帮我们做了大部分工作, 接下来只需要集成数据库操作, 以及
HTMLTestRunner 测试报告生成扩展即可 .