python - 接口自动化测试实战 - case1 - 优化版

题目:
  基于以下两个接口和数据完成接口自动化测试,并生成测试报告:
'''
登录

login='http://47.107.168.87:8080/futureloan/mvc/api/member/login'
login_data={'mobilephone':18688773467,'pwd':'123456'}

充值

recharge='http://47.107.168.87:8080/futureloan/mvc/api/member/recharge'
recharge_data={'mobilephone':18688773467,'amount':'1000'}
'''
test_excel.xlsx:


http_request.py
# -*- coding:utf-8 -*-

'''
@project: jiaxy
@author: Jimmy
@file: http_request.py
@ide: PyCharm Community Edition
@time: 2018-12-05 10:06
@blog: https://www.cnblogs.com/gotesting/

'''

import requests

class HttpRequest:

    def http_request(self,url,param,method,cookies=None):
        if method == 'get':
            res = requests.get(url,param,cookies = cookies)
        elif method == 'post':
            res = requests.post(url,param,cookies = cookies)
        else:
            print('请求方法错误!')
        return res

read_excel.py
# -*- coding:utf-8 -*-

'''
@project: jiaxy
@author: Jimmy
@file: read_excel.py
@ide: PyCharm Community Edition
@time: 2018-12-05 11:57
@blog: https://www.cnblogs.com/gotesting/

'''

from openpyxl import load_workbook

class ReadExcel:

    def read_excel(self):
        wb = load_workbook('test_excel.xlsx')
        sheet = wb['登录及充值测试数据']
        test_data = []
        for i in range(2,sheet.max_row+1):
            sub_data = {}
            sub_data['url'] = sheet.cell(i,1).value
            sub_data['param'] = eval(sheet.cell(i,2).value)
            sub_data['method'] = sheet.cell(i,3).value
            sub_data['expected'] = sheet.cell(i,4).value
            test_data.append(sub_data)
        return test_data

 



test_api.py
# -*- coding:utf-8 -*-

'''
@project: jiaxy
@author: Jimmy
@file: TestApi.py
@ide: PyCharm Community Edition
@time: 2018-12-05 10:09
@blog: https://www.cnblogs.com/gotesting/

'''

import unittest

from TestApi.http_request import HttpRequest

cookies = None

class TestHttpApi(unittest.TestCase):

    def setUp(self):
        pass

    def tearDown(self):
        pass

    # 改写__init__方法,使用超继承
    def __init__(self,url,param,method,expected,methodName):
        self.url = url
        self.param = param
        self.method = method
        self.expected = expected
        super(TestHttpApi,self).__init__(methodName)

    def test_api(self):
        global cookies
        res = HttpRequest().http_request(self.url,self.param,self.method,cookies)
        print('请求结果:',res.json())
        if res.cookies:
            cookies = res.cookies

        try:
            self.assertEquals(self.expected,res.json()['msg'])
        except AssertionError as e:
            print('断言异常:',e)
            raise e

 

test_suite.py
# -*- coding:utf-8 -*-

'''
@project: jiaxy
@author: Jimmy
@file: test_suite.py
@ide: PyCharm Community Edition
@time: 2018-12-05 10:28
@blog: https://www.cnblogs.com/gotesting/

'''

import unittest
import HTMLTestRunner
from TestApi.test_api import TestHttpApi
from TestApi.read_excel import ReadExcel

# 定义测试数据列表
test_data = ReadExcel().read_excel()
print(test_data)
'''
test_data = [{'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/login','param':{'mobilephone':'','pwd':'123456'},'method':'get','expected':'手机号不能为空'},
             {'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/login','param':{'mobilephone':18688773467,'pwd':''},'method':'get','expected':'密码不能为空'},
             {'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/login','param':{'mobilephone':18688773467,'pwd':'12345678'},'method':'get','expected':'用户名或密码错误'},
             {'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/login','param':{'mobilephone':18688773467,'pwd':'123456'},'method':'get','expected':'登录成功'},
             {'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/recharge','param':{'mobilephone':'','amount':'1000'},'method':'post','expected':'手机号不能为空'},
             {'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/recharge','param':{'mobilephone':1868877346,'amount':'1000'},'method':'post','expected':'手机号码格式不正确'},
             {'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/recharge','param':{'mobilephone':18688773467,'amount':''},'method':'post','expected':'请输入金额'},
             {'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/recharge','param':{'mobilephone':18688773467,'amount':'100000000000'},'method':'post','expected':'请输入范围在0到50万之间的正数金额'},
             {'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/recharge','param':{'mobilephone':18688773467,'amount':'1000'},'method':'post','expected':'充值成功'}]
'''

# 加载测试集
suite = unittest.TestSuite()
for item in test_data:
    suite.addTest(TestHttpApi(item['url'],
                              item['param'],
                              item['method'],
                              item['expected'],
                              'test_api'))

# 执行测试,输出测试报告
with open('TestApi.html','wb+') as file:
    runner = HTMLTestRunner.HTMLTestRunner(file)
    runner.run(suite)

 

 

 

 

测试报告:

 

 

 

posted @ 2018-12-05 11:05  JiaxyGogogo  阅读(372)  评论(0编辑  收藏  举报