接口测试—-工具篇,实现接口自动化

接口测试—-工具篇,实现接口自动化

今天来看下接口测试的两个工具方式,目前主流的做法有两种方式—-基于代码框架的用例编写和直接使用接口测试工具,那么本篇就这两种方式都来实现一下,为了说明情况,我们实现上一篇的前两个用例:直接请求readnotes接口数据和带上登录信息请求readnotes数据。

工具:使用的是jmeter
代码:使用的是python的unittest + requests + htmlreportrunner方式(https://github.com/CloudHuan/pyapitest)

jmeter

首先看jmeter的实现方式:
首先创建线程组,然后在线程组添加http取样器,每一个取样器就是一条用例。
打开,配置url和相对应的参数。

这里写图片描述

请求完成之后针对结果做断言

这里写图片描述
最终的目录结构和自带的报告如下:

这里写图片描述
这里写图片描述

那么可以看到,jmeter入手非常快,然后校验的也比较简单,主要是针对返回码、返回内容进行校验。

代码

利用了requests库去负责请求响应,利用unitest做结果判断,利用htmlreportrunner生成报告。
项目的结构如下:

Reports目录是生成报告的存储目录
Testcases存放测试用例
Testtools是测试相关的封装,比如里面我疯撞了pymysql的调用
点击run.py执行运行并自动生成报告。

直接跳到测试用例看下实现的用例代码:

import unittest
from wsgiref import headers

import requests
import re

from testtools.MySQLHelper import SqlHelper


class readnote(unittest.TestCase):

    mUrl = 'http://127.0.0.1:8000/note/readnotes';

    def setUp(self):
        pass

    def tearDown(self):
        pass

    def test_readnote_null(self):
        '''所有参数为空'''
        resp = requests.get(self.mUrl).json();
        self.assertTrue(resp['code'] == 0);
        self.assertTrue(resp['data'] != []);
        r = SqlHelper().query('SELECT * FROM account_note WHERE public=1');
        self.assertTrue(len(r) == len(resp['data']));

    def test_readnote_only_token(self):
        '''只填写token,获取自己的列表'''
        resp = requests.get(self.mUrl,headers={'TOKEN':'1'}).json();
        self.assertTrue(resp['code'] == 0);
        self.assertTrue(resp['data'] != []);
        r = SqlHelper().query("SELECT * FROM account_user a JOIN account_note b ON a.uid = b.uuid WHERE TOKEN='1'");
        self.assertTrue(len(r) == len(resp['data']));

    def test_readnote_only_uid(self):
        '''只填写uid,获取用户列表'''
        pass

    def test_readnote_all(self):
        '''参数都填写'''
        pass

    def test_readnote_invalidataUID(self):
        '''uid不存在'''
        pass

    def test_readnote_invalidataToken(self):
        '''token不存在'''
        pass

    def test_readnote_no_content(self):
        '''新注册用户,无内容返回'''
        pass

通过request请求获取数据后,解析json数据,首先判断code和data,然后解析data看下具体业务返回得对不对,作为断言的判断,是根据sql查询数据库的数据对比得到的。后面的断言,jmeter要实现起来会比较繁琐,更别说维护了。

区别和选择

那么工具和代码实现,各有各的优势。

使用工具,你可以很快速的上手,学习成本比较低,很多都是现成的。同时工具往往还提供额外的功能,比如jmeter我除了用来接口自动化集成,同时也用来压测部分重要接口,缺点非常明显啦,局限性会比较大,要实现一些复杂的功能需要通过自己定制的插件实现,既然都要写代码,为何不直接用代码来验证呢?

那么使用自己编写的框架,最大的好处是灵活,更容易针对项目定制化,虽然前期投入会比较大,但是一旦完善了那么会显得非常好用,可以完成一些工具无法完成的事情,比如接口加密,环境切换,用例维护管理等等,基于这个原因,很多有一定规模的项目肯定都是采用后者的。

猜你喜欢

转载自blog.csdn.net/cloud_huan/article/details/77069673