更多课程 选择中心


Python培训

400-111-8989

利用python和excel 搭建接口测试框架


互联网公司对QA几乎有一个统一的要求:自动化测试能力。哪怕公司所有的测试都是业务测试,自动化能力也是个标配。对测试过程和质量保证过程中,适量的自动化能达到事半功倍的效果。

相对于UI自动化测试,接口自动化测试更加稳定;
相对于白盒自动化测试,接口自动化更加容易;

接口自动化的好处,再老生常谈一下:

  • 提高测试效率。这几乎是所有自动化测试的好处。

  • 完成手工测试繁琐的工作,但对自动化测试却很easy的事情。

  • 反复执行。执行次数越多,收益越大。

  • 提高/维持测试覆盖率。通过自动化来覆盖更多的场景,来提高代码覆盖率。

本文就以python 加 excel, 应用requests来搭建一个简易的自动化框架。

对于业务不是很复杂,单个的接口测试,用excel可以实现数据驱动,方便管理和维护case。

运用第三方库requests请求接口,根据结果和期望值进行断言,根据输出报告判断接口测试是否通过。

requests是一个很实用的python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到。

安装方式一般采用

pip install requests

通过前一篇文章,搭建天气预报的api server.
我们设计一些用例如下:

先写一个manage excel的类:

import xlrd

class readExcel(object):
    def __init__(self, path):
        self.path = path

    @property
    def getSheet(self):
        # 获取索引
        xl = xlrd.open_workbook(self.path)
        sheet = xl.sheet_by_index(0)
        return sheet

    @property
    def getRows(self):
        # 获取行数
        rows = self.getSheet.nrows
        return rows

    @property
    def getCol(self):
        # 获取列数
        col = self.getSheet.ncols
        return col

    # 以下是分别获取每一列的数值
    def getName(self, column_index):
        if column_index <= self.getCol:
            ColumnName = []
            for i in range(1, self.getRows):
                ColumnName.append(self.getSheet.cell_value(i, column_index))
            return ColumnName
        else:
            print("输入的column不合法!")

然后写一个处理接口的类,对于大多数接口来说,我们只用到get, post方法:

import requests

class testApi(object):
    def __init__(self, method, url, data):
        self.method = method
        self.url = url
        self.data = data

    @property
    def testApi(self):
        # 根据不同的访问方式来访问接口
        try:
            if self.method == 'post':
                if self.data == "":
                    print("No data post")
                else:
                    result = requests.post(self.url, data=(self.data).encode('utf-8'))
            elif self.method == 'get':
                if self.data == "":
                    result = requests.get(self.url)
                else:
                    result = requests.get(self.url, params=self.data)

            return result
        except:
            print('失败')

    def getCode(self):
        # 获取访问接口的状态码
        code = self.testApi.status_code
        return code

    def getJson(self):
        # 获取返回信息的json数据
        json_data = self.testApi.json()
        return json_data

写个管理全局变量的文件:

from manageexcel import readExcel

CASE_NUMBER = 0 #用例编号
CASE_NAME = 1   #用例名称
CASE_METHOD = 2 #请求类型
CASE_URL = 3    #请求地址
CASE_DATA = 4   #用例数据
CASE_STATUS = 5 #用例状态
CASE_KEY = 6    #验证关键字

file_path = "/Users/anderson/PycharmProjects/restfulapi/api_data.xlsx"
host = "http://localhost:5000"

row_num = readExcel(file_path).getRows

class CASE:
    number = readExcel(file_path).getName(CASE_NUMBER)
    name = readExcel(file_path).getName(CASE_NAME)
    method = readExcel(file_path).getName(CASE_METHOD)
    url = readExcel(file_path).getName(CASE_URL)
    data = readExcel(file_path).getName(CASE_DATA)
    status = readExcel(file_path).getName(CASE_STATUS)
    key = readExcel(file_path).getName(CASE_KEY)

接着就可以写实现用例了:

import unittest

from globals import CASE,host,row_num
from manageapi import testApi

class testWeatherApi(unittest.TestCase):
    def testWeatherApi(self):
        '''测试获取城市天气接口。'''

        for i in range(0, row_num - 1):
            api = testApi(CASE.method[i], host + CASE.url[i], CASE.data[i])
            apicode = api.getCode()
            apijson = api.getJson()
            if apicode == CASE.status[i]:
                print('{}、{}:测试成功。json数据为:{}'.format(i + 1, CASE.name[i], apijson))

            else:
                print('{}、{}:测试失败'.format(i + 1, CASE.name[i]))

if __name__ == '__main__':
    unittest.main(verbosity=2)

运行成功!
可以写一个执行suite的文件,并引入测试报告:

import unittest
from testcity import testWeatherApi
from HTMLTestRunner import HTMLTestRunner

testunit = unittest.TestSuite()
testunit.addTest(testWeatherApi("testWeatherApi"))
fp = open('./result.html','wb')
runner = HTMLTestRunner(stream=fp,title="API测试报告",description="测试执行情况")
runner.run(testunit)
fp.close()

报告如下:

一个简单的接口测试框架就搭建起来了,麻雀虽小,五脏俱全,当然可继续实现发送邮件,集成CI。

对于简单的接口,用数据驱动来实现自动化更简单方便,实现起来简单快捷。

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:Python 并发编程之线程池/进程池
下一篇:Excel+Python碰撞出来的火花相当不错

2021年Python全套免费视频教程在哪里?

Python编程学习路线

Python最高有几级?

人工智能与语音遥控的区别?

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省