广东快乐10分预测

当前位置:广东快乐10分预测 > 广东快乐10分预测 > 简言之达成接口自动化测量检验(基于python卡塔尔

简言之达成接口自动化测量检验(基于python卡塔尔

来源:http://www.btxygg.com 作者:广东快乐10分预测 时间:2019-11-28 19:25

8卡塔尔.方便的和相连集成工具集成

七、扩展

http接口诉求的架子大家定义好了,我们还能够做些什么呢?

  • [x] 非HTTP磋商接口
  • [x] 测量试验用例编写
  • [x] 配置文件管理
  • [x] 测量检验数据管理
  • [x] 工具类编写
  • [x] 测量试验报告生成
  • [x] 持续集成
  • [x] 等等等等

亟需做的要么挺多的,要做什么样绝不做什么样,可能先做哪些,小编以为能够依赖以下几点去看清:

  • 是不是有支持增加组织临盆功效
  • 是或不是方便人民群众提升测量检验品质
  • 有未有现有的车轮能够用

下边就几项重要的点实行一下证实,限于篇幅,不再实行了

  1. python3 第三方库 requests pytest 框架,必要的条件都要有备无患好 接纳pytest 那个框架的缘故

使用

1、央求的接口 2、央浼的秘诀 3、央浼 的参数 4、诉求的回来结果

干什么要和谐写框架呢?

行使requets unittest超轻松完成接口自动化测量检验,况兼requests的api已经充足人性化,非常简单,但由此包装现在(极度是针对公司内一定接口),再增进对某些常用工具的包裹,能够进一层提升业务脚本编辑撰写功用。


3、对作业的耳熟能详程度

怎么要做接口自动化测量试验?

在脚下互连网付加物迭代频仍的背景下,回归测验的年华越来越少,很难在各样迭代都对具备作用做完全回归。但接口自动化测量试验因其完毕轻易、维护成本低,轻易提升覆盖率等特点,更加的受尊重。

  1. 進展接口自动化 前提:分明实行的指标,是要做单接口的监察还是交易流程的监察和控制,只怕是在 测量检验情况把持有接口都蒙蔽,又可能接口自动化测验是为了线上服务如故为了 线下测验意况服务 举例:今后要做的是上单接口的监察,监察和控制的指标只为了维持接口的可用性, 注明那几个接口是可用的就足以了。所以听大人讲不一致的目标设计接口测量试验是有不一致的测试点的,譬如单接口的督察,只须求统筹正向的用例就足以了,注明接口 是通的就能够了。因为线上做太多的测验轻便产生比非常多的脏数据。如若在测验情况要做每种接口的全覆盖,那么每一种接口的正向用例,卓殊用例都以要覆 盖到的,如若用例非常多要借助效果与利益的主导来鲜明部分接口用例的范围采取贰个最优的成团做为接口用例的集合注意点:每一种用例尽或许独立施行,要是须求有的缓存数据要么写死依旧长期有效的,幸免二个接口的用例要求依据别的接口,那样做的缘故是若是被注重的接口退步了足避防止信赖的接口履行是没戏的 最后:情状、接口文书档案、用例的安插性的汇集以致接口的目标都规定后得以起来 写了

  2. 实际接口自动化代码编写表明 首先根据接口文书档案找到央浼的 url 及接口地址加上 host 第二片段央浼的参数 第三片段少年老成旦有头文件就把头文件放进来,若无头文件能够忽略第四发出必要 第五对相应结果进行判定 相应结果判定关心的六局地:

三、景况策画

作保本机已安装python2.7之上版本,然后安装如下库

pip install flask
pip install requests

末尾大家会动用flask写一个用来测量检验的接口,使用requests去测验


好啊,以上正是自家的分享,倘令你跟本人同样都爱好python,也在学习python的征途上奔跑,款待你步入python学习群:839383765 群内每日都会分享最新职业资料,分享python免费课程,合作调换学习,让学习变生龙活虎种习贯!

四、测验接口希图

上边接收flask完成多少个http接口,贰个签到,别的四个查询详细的情况,但需要登入后才得以,新建一个demo.py文件(注意,不要使用windows记事本),把下面代码copy进去,然后保留、关闭

3卡塔尔(英语:State of Qatar). 接口测验包含接口自动化和手工业接口测验

保持cookies&增加log信息

采用requestsCurry的同七个Session对象(它也会在同三个Session 实例发出的享有伏乞之间维持 cookie卡塔尔,就能够缓和地方的主题素材,示例代码如下:

#!/usr/bin/python
# coding=utf-8
import unittest
from pprint import pprint
from requests.sessions import Session
try:
    from urlparse import urljoin
except ImportError:
    from urllib.parse import urljoin


class DemoApi(object):

    def __init__(self, base_url):
        self.base_url = base_url
        # 创建session实例
        self.session = Session()

    def login(self, username, password):
        """
        登录接口
        :param username: 用户名
        :param password: 密码
        """
        url = urljoin(self.base_url, 'login')
        data = {
            'username': username,
            'password': password
        }

        response = self.session.post(url, data=data).json()
        print('n*****************************************')
        print(u'n1、请求url: n%s' % url)
        print(u'n2、请求头信息:')
        pprint(self.session.headers)
        print(u'n3、请求参数:')
        pprint(data)
        print(u'n4、响应:')
        pprint(response)
        return response

    def info(self):
        """
        详情接口
        """
        url = urljoin(self.base_url, 'info')
        response = self.session.get(url).json()

        print('n*****************************************')
        print(u'n1、请求url: n%s' % url)
        print(u'n2、请求头信息:')
        pprint(self.session.headers)
        print(u'n3、请求cookies:')
        pprint(dict(self.session.cookies))
        print(u'n4、响应:')
        pprint(response)
        return response


class TestLogin(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.base_url = 'http://127.0.0.1:5000'
        cls.username = 'admin'
        cls.password = '123456'
        cls.app = DemoApi(cls.base_url)

    def test_login(self):
        """
        测试登录
        """
        response = self.app.login(self.username, self.password)
        assert response['code'] == 200
        assert response['msg'] == 'success'

    def test_info(self):
        """
        测试获取详情信息
        """
        self.app.login(self.username, self.password)
        response = self.app.info()
        assert response['code'] == 200
        assert response['msg'] == 'success'
        assert response['data'] == 'info'

劳苦功高告成,大家把三个有关接口调用封装到二个类中,使用同一个requests Session实例来维系cookies,並且在调用进度中打字与印刷出了日记,大家富有目的都达成了,但再看下脚本,又会倍感不太安适,在各样方法里,都要写二次print 1、2、3... 要拼url、还要比较多细节等等,但实际大家当真须求做的只是拼出主要的参数(url参数、body参数只怕传播headers新闻),可不得以只需定义必得的音信,然后把此外共性的东西都卷入起来吧,统后生可畏置于二个地点去管理?

做接口测量试验前的备选专业

调用HTTP登入接口示例

from pithy import request

@request(url='http://httpbin.org/post', method='post')
def post(self, key1='value1'):
    """
    post method
    """
    data = {
        'key1': key1
    }
    return dict(data=data)

# 使用
response = post('test').to_json()     # 解析json字符,输出为字典
response = post('test').json          # 解析json字符,输出为字典
response = post('test').to_content()  # 输出为字符串
response = post('test').content       # 输出为字符串
response = post('test').get_cookie()  # 输出cookie对象
response = post('test').cookie        # 输出cookie对象

# 结果取值, 假设此处response = {'a': 1, 'b': { 'c': [1, 2, 3, 4]}}
response = post('13111111111', '123abc').json

print response.b.c   # 通过点号取值,结果为[1, 2, 3, 4]

print response('$.a') # 通过object path取值,结果为1

for i in response('$..c[@>3]'): # 通过object path取值,结果为选中c字典里大于3的元素
    print i

python 做接口自动化须要预备的剧情

优化JSON、字典使用

# 1、操作JSON的KEY
from pithy import JSONProcessor
dict_data = {'a': 1, 'b': {'a': [1, 2, 3, 4]}}
json_data = json.dumps(dict_data)
result = JSONProcessor(json_data)
print result.a     # 结果:1
print result.b.a   # 结果:[1, 2, 3, 4]

# 2、操作字典的KEY
dict_data = {'a': 1, 'b': {'a': [1, 2, 3, 4]}}
result = JSONProcessor(dict_data)
print result.a     # 1
print result.b.a   # [1, 2, 3, 4]

# 3、object path取值
raw_dict = {
    'key1':{
        'key2':{
            'key3': [1, 2, 3, 4, 5, 6, 7, 8]
        }
    }
}

jp = JSONProcessor(raw_dict)
for i in jp('$..key3[@>3]'):
    print i

# 4、其它用法
dict_1 = {'a': 'a'}
json_1 = '{"b": "b"}'
jp = JSONProcessor(dict_1, json_1, c='c')
print(jp)

4卡塔尔.参数的完整性

详细情况接口

  • 请求url
/info
  • 伏乞方法
get
  • 请求cookies
参数名称 参数类型 参数说明
session String session
  • 其应若响音讯
参数名称 参数类型 参数说明
code Integer 结果code
msg String 结果信息
data String 数据信息

1卡塔尔.重临的状态码检查

每每集成

接踵而至 蜂拥而至集成推荐应用Jenkins,运增势况、准期任务、触发运行、邮件发送等意气风发雨后玉兰片功效均可以在Jenkins上实现。

3.Jenkins 再三集成 首先筹划好 Jenkins 持续集成的服务器,然后去创建一个职责,创制完职分去 配置需求的消息比方git 源,然后实施的通令构建后的有个别操作,比如发邮件 等等制造职分的时候假如用 git 源,用 ssh 这种措施的话,供给去设 sshkey,然后 是设置那一个职分的实施作用,日常是有两种办法:第大器晚成种周期实行项目创设, 它不关怀你代码源是或不是是有转换的,它是根据设定的岁月期限去奉行设定的职责,第两种是 icm 这种格局,它是定期检查源代码的退换,固然源代码有改观, 它便是实践设定的任务,假如源代码未有改换则不实行,还大概有其余的方 式,都 要依赖实际须求去采用相应的主意。

接口代码

#!/usr/bin/python
# coding=utf-8
from flask import Flask, request, session, jsonify

USERNAME = 'admin'
PASSWORD = '123456'

app = Flask(__name__)
app.secret_key = 'pithy'


@app.route('/login', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        if request.form['username'] != USERNAME:
            error = 'Invalid username'
        elif request.form['password'] != PASSWORD:
            error = 'Invalid password'
        else:
            session['logged_in'] = True
            return jsonify({'code': 200, 'msg': 'success'})
    return jsonify({'code': 401, 'msg': error}), 401


@app.route('/info', methods=['get'])
def info():
    if not session.get('logged_in'):
        return jsonify({'code': 401, 'msg': 'please login !!'})
    return jsonify({'code': 200, 'msg': 'success', 'data': 'info'})

if __name__ == '__main__':
    app.run(debug=True)

最终施行如下命令

python demo.py

一呼百应如下

 * Running on http://127.0.0.1:5000/ (Press CTRL C to quit)
 * Restarting with stat

大家能够观望服务风华正茂度起起来了

2、http 左券的学问

八、pithy测量试验框架介绍

pithy意为简单有力的,意在简化自动化接口测量试验,升高测验效能

  • 品类地址:点击查看
  • 救助文书档案:点击查阅

脚下跌实的职能如下:

  • 风姿洒脱键生成测量检验项目
  • http client封装
  • thrift接口封装
  • 简化配置文件使用
  • 优化JSON、日期等工具使用

编制测验用例推荐使用pytest,pytest提供了无数测量检验工具甚至插件,能够知足大多数测量检验必要。

第一是变量和数据类型,其次列表、字典以至 Json 的部分甩卖,再者就是循环 剖断以致函数或类这个剧情。 当中的主要:

测量试验报告

以此理应是大家最关心的了,终究那是测量检验职业的面世;
现阶段python的主流单元测量试验框均有report插件,由此不建议和煦再编辑,除非有新鲜要求的。

  • pytest:推荐应用pytest-html和allure pytest

  • unittest:推荐应用HTMLTestRunner

4卡塔尔(英语:State of Qatar).实行测量检验进程中能够将一些测量检验跳过,恐怕对一些预期战败的 case 标记成失利

测验用例编写

推荐固守如下准则:

  • 原子性:各个用例保持独立,互相不耦合,以减弱郁闷;
  • 专一性:叁个用例应该注意于验证生龙活虎件业务,并不是做过多作业,三个测试点不要再一次认证;
  • 稳定性:绝大大多用例应该是那些平稳的,也正是说不会日常因为除景况以外的成分挂掉,因为要是在一个测量检验项目中有许多不安静的用例的话,测量检验结果就不可能很好的反馈项目质量;
  • 分类清晰:有相关性的用例应写到四个模块或一个测验类里,那样做即方便维护,又拉长了报告的可读性;
  1. 接口文书档案的思虑

登陆接口

  • 请求url
 /login
  • 恳请方法
 post
  • 倡议参数
参数名称 参数类型 参数说明
username String 登录名称
password String 登录密码
  • 响应新闻
参数名称 参数类型 参数说明
code Integer 结果code
msg String 结果信息

7卡塔尔.具备比非常多第三方插件,而且能够自定义扩充

接口音信

广东快乐10分预测 1

包裹重复操作

来,大家再收拾一下我们的须要:

  • 首先,不想去重复做拼接url的操作
  • 接下来,不想每便都去手工业打字与印刷日志
  • 不想和requests session打交道
  • 只想定义好参数就径直调用

我们先看一下兑现后,脚本或然是什么样:

class DemoApi(object):

    def __init__(self, base_url):
        self.base_url = base_url

    @request(url='login', method='post')
    def login(self, username, password):
        """
        登录接口
        """
        data = {
            'username': username,
            'password': password
        }

        return {'data': data}

    @request(url='info', method='get')
    def info(self):
        """
        详情接口
        """
        pass

调用登入接口的日志

******************************************************
1、接口描述
登录接口

2、请求url
http://127.0.0.1:5000/login

3、请求方法
post

4、请求headers
{
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Connection": "keep-alive",
    "User-Agent": "python-requests/2.7.0 CPython/2.7.10 Darwin/16.4.0"
}

5、body参数
{
    "password": "123456",
    "username": "admin"
}

6、响应结果
{
    "code": 200,
    "msg": "success"
}

在这里边,大家接受python的装饰器功用,把集体特性封装到装饰器中去贯彻。现在以为到多数了,没什么多余的东西了,大家得以小心于重点参数的布局,剩下的就是怎么着去落到实处那么些装饰器了,大家先理一下思路:

  • 收获装饰器参数
  • 获得函数/方法参数
  • 把装饰器和函数定义的参数合併
  • 拼接url
  • 管理requests session,有则利用,无则新生成二个
  • 创设全体参数,发送http央求并打字与印刷日志

因篇幅限定,源码不再列出,有野趣的同班可以查看已经贯彻的源代码

源代码查看地址:
https://github.com/yuyu1987/pithy-test/blob/master/pithy/api.py


3卡塔尔国.扶植参数化

安装

pip install pithy-test
pip install pytest

测验从业者学习 python 应该调整的从头到尾的经过:

卷入接口调用

写完那个测试登陆脚本,你大概会意识,在全方位项目标测量试验进度,登入恐怕无休止用到一遍,假使每一次都如此写,会不会太冗余了? 对,确实太冗余了,上边做一下轻巧的包装,把登陆接口的调用封装到叁个格局里,把调用参数暴漏出来,示例脚本如下:

#!/usr/bin/python
# coding=utf-8
import requests
import unittest
try:
    from urlparse import urljoin
except ImportError:
    from urllib.parse import urljoin


class DemoApi(object):

    def __init__(self, base_url):
        self.base_url = base_url

    def login(self, username, password):
        """
        登录接口
        :param username: 用户名
        :param password: 密码
        """
        url = urljoin(self.base_url, 'login')
        data = {
            'username': username,
            'password': password
        }

        return requests.post(url, data=data).json()

    def get_cookies(self, username, password):
        """
        获取登录cookies
        """
        url = urljoin(self.base_url, 'login')
        data = {
            'username': username,
            'password': password
        }

        return requests.post(url, data=data).cookies

    def info(self, cookies):
        """
        详情接口
        """
        url = urljoin(self.base_url, 'info')
        return requests.get(url, cookies=cookies).json()


class TestLogin(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.base_url = 'http://127.0.0.1:5000'
        cls.username = 'admin'
        cls.password = '123456'
        cls.app = DemoApi(cls.base_url)

    def test_login(self):
        """
        测试登录
        """
        response = self.app.login(self.username, self.password)
        assert response['code'] == 200
        assert response['msg'] == 'success'

    def test_info(self):
        """
        测试获取详情信息
        """
        cookies = self.app.get_cookies(self.username, self.password)
        response = self.app.info(cookies)
        assert response['code'] == 200
        assert response['msg'] == 'success'
        assert response['data'] == 'info'

OK,在此三个版本中,大家不光在把登入接口的调用封装成了一个实例方法,达成了复用,况兼还把host(self.base_url)提取了出来,但难点又来了,登入之后,登陆接口的http响应会把session以 cookie的花样set到顾客端,之后的接口都会选用此session去央浼,还应该有,便是在接口调用进程中,希望得以把日志打字与印刷出来,以便调试也许出错开上下班时间翻看。
好呢,大家再来改生龙活虎版。

2.函数和类,类的上学那块要花相当多时间去学习它的三合一、封装、多态等,那是一个连发堆成堆的长河,先把后面包车型大巴东西弄精晓了,然后去学什么用函数的情势去管理那一个相比较底子的始末 python 大纲学习内容详见另风度翩翩篇文章扫下方二维码 电子商务项目直播 二、python 接口自动化 API 测验不一样于 UI 自动化测量检验,它至关心敬爱要关怀系统结构的专门的职业逻辑层,或然说三个也许两模块的逻辑关系,重视在逻辑关系。

二、引言

5卡塔尔(英语:State of Qatar).帮助再度推行倒闭的 case

测量试验数据处理

广泛的艺术有写在代码里、写在配备文件里(xml、yaml、json、.py、excel等卡塔尔(قطر‎、写在数据Curry等,该处未有怎么好引入的,提出依照个人喜好,怎么方便怎么来就足以。


总括首先环境的思忖,其次做接口自动化的指标,基于指标设计测量试验用例,设计完 测量试验用例鲜明重回结果注解的水平,那么些都分明好后根据 pytest 模版写用例就可以了。

本子完结

#!/usr/bin/python
# coding=utf-8
import requests
import unittest


class TestLogin(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.login_url = 'http://127.0.0.1:5000/login'
        cls.info_url = 'http://127.0.0.1:5000/info'
        cls.username = 'admin'
        cls.password = '123456'

    def test_login(self):
        """
        测试登录
        """
        data = {
            'username': self.username,
            'password': self.password
        }

        response = requests.post(self.login_url, data=data).json()

        assert response['code'] == 200
        assert response['msg'] == 'success'

    def test_info(self):
        """
        测试info接口
        """

        data = {
            'username': self.username,
            'password': self.password
        }

        response_cookies = requests.post(self.login_url, data=data).cookies
        session = response_cookies.get('session')
        assert session

        info_cookies = {
            'session': session
        }

        response = requests.get(self.info_url, cookies=info_cookies).json()
        assert response['code'] == 200
        assert response['msg'] == 'success'
        assert response['data'] == 'info'

5卡塔尔.特殊参数的自己商量

生机勃勃键生成测量检验项目

>>>  pithy-cli init
请选择项目类型,输入api或者app: api
请输入项目名称,如pithy-api-test: pithy-api-test
开始创建pithy-api-test项目
开始渲染...
生成 api/.gitignore                   [√]
生成 api/apis/__init__.py             [√]
生成 api/apis/pithy_api.py            [√]
生成 api/cfg.yaml                     [√]
生成 api/db/__init__.py               [√]
生成 api/db/pithy_db.py               [√]
生成 api/README.MD                    [√]
生成 api/requirements.txt             [√]
生成 api/test_suites/__init__.py      [√]
生成 api/test_suites/test_login.py    [√]
生成 api/utils/__init__.py            [√]
生成成功,请使用编辑器打开该项目

转移项目树

>>> tree pithy-api-test
pithy-api-test
├── README.MD
├── apis
│   ├── __init__.py
│   └── pithy_api.py
├── cfg.yaml
├── db
│   ├── __init__.py
│   └── pithy_db.py
├── requirements.txt
├── test_suites
│   ├── __init__.py
│   └── test_login.py
└── utils
    └── __init__.py

4 directories, 10 files

2卡塔尔.接口再次回到的要害参数的检查

六、优化

1.巡回决断以至字典那块是至关心器重要

测验思路

  • 使用requests [选拔链接]库模拟发送HTTP须求
  • 选拔python规范Curryunittest写测验case

6卡塔尔(英语:State of Qatar).功效性的反省 扫下方二维码 电子商务项目直播

五、编写接口测量试验

3卡塔尔国.接口完整性正是它的层级关系是或不是准确

测验工具类

其风姿洒脱能够依赖项目情状去做,力求简化一些类库的接受,数据库访谈、日期时间、序列化与反体系化等数码管理,或然封装一些常用操作,如随意生成订单号等等,以巩固脚本编辑撰写功能。

2卡塔尔. 无接口文书档案使用抓包工具获取新闻

一、简介

正文从三个简易的报到接口测量检验出手,一步步调动优化接口调用姿势,然后简短研商了一下接口测验框架的要义,最终介绍了大器晚成晃大家当前正值利用的接口测量试验框架pithy。期待读者能够经过本文对接口自动化测量检验有四个大概的问询。

1卡塔尔国. 接口文书档案起码含有四个部分

九、总结

在本文中,大家以抓实脚本开垦功效为前提,一步一步构建了三个简短的测量检验框架,但因水平所限,并未有提到测验数据开端化清理、测量检验中哪些MOCK等话题,前路依然主要,希望给大家二个启发,白璧微瑕还望多多指引,特别感激。


参考:

[1] requests:http://www.python-requests.org/en/master/
[2] thriftpy:http://thriftpy.readthedocs.io/en/latest/
[3] objectpath:http://objectpath.org/
[4] pytest:https://docs.pytest.org

2卡塔尔(英语:State of Qatar).能够扶助轻易的单元测验和眼花缭乱的效果测验

越来越多接纳方法

点击查看


1、接口文书档案

1卡塔尔国.特别轻便上手,入门简单,文书档案丰盛,文书档案中有超级多实例能够参谋行当动态、本领调换、

6卡塔尔(قطر‎.协助运行由 nose, unittest 编写的测量检验 case

本文由广东快乐10分预测发布于广东快乐10分预测,转载请注明出处:简言之达成接口自动化测量检验(基于python卡塔尔

关键词: Python 基础知识 框架 Pytest中文