[接口测试_B] 13 pytest+requests实战练习1

接续这个文集中的文章:https://www.jianshu.com/nb/23293583

找不到免费的接口,所以依然以requests官方文档中出现的httpbin为示例,为了保持网络的稳定,可以把httpbin搭建在本地。

httpbin环境搭建

  • VMware12
  • ubuntu kylin 16.04_x64
  • python3.5
sudo apt-get install python3-pip
  • 安装虚拟环境,pipenv:
python3 -m pip install pipenv
# 在项目目录下
pipenv install
# 进入虚拟环境
pipenv shell

在安装pip后,创建虚拟环境,安装httpbin和gunicorn:

pipenv install httpbin
pipenv install gunicorn

启动httpbin,如果启动后,宿主机无法访问,查看防火墙设置,把端口加入iptables:

gunicorn -b :8088 httpbin:app
image.png
image.png

测试httpbin接口

前面了解requests的过程中,多次用到httpbin接口做示例。对这个接口应该比较熟悉了。先实现简单的接口测试。

"""
Created by catleer on 2018-05-21.
"""
__author__ = 'catleer'

import re
from urllib.parse import urljoin

import requests
import pytest


url = 'http://192.168.86.131:8088/'

methods = ['GET', 'POST', 'PATCH', 'DELETE', 'PUT']
method = methods[1]
interface = ['HTTP methods', 'Auth', 'Status Codes', 'Requests Inspection',
             'Response Inspection', 'Response Formats', 'Dynamic data',
             'Cookies', 'Images', 'Redirects', 'Anything']


class TestHttpMethods:

    @classmethod
    def setup_class(cls):
        cls.url = 'http://192.168.86.131:8088/'
        cls.data = {'haha': 'nihao'}

    def test_get(self):
        url = urljoin(self.url, 'get')
        r = requests.get(url, params=self.data).json()
        print(r)
        # assert r['url'] == url
        assert r['args'] == self.data

    def test_post(self):
        url = urljoin(self.url, 'post')
        r = requests.post(url, data=self.data).json()
        assert r['url'] == url
        assert r['form'] == self.data

    def test_patch(self):
        url = urljoin(self.url, 'patch')
        r = requests.patch(url, data=self.data).json()
        assert r['url'] == url
        assert r['form'] == self.data

    def test_put(self):
        url = urljoin(self.url, 'put')
        r = requests.put(url, data=self.data).json()
        assert r['url'] == url
        assert r['form'] == self.data

    def test_delete(self):
        url = urljoin(self.url, 'delete')
        r = requests.delete(url, data=self.data).json()
        assert r['url'] == url
        assert r['form'] == self.data

class TestAuth:
    @classmethod
    def setup_class(cls):
        cls.url = 'http://192.168.86.131:8088/'
        # cls.data = {'haha': 'nihao'}

    def test_basicauth_y(self):
        data = 'aa', '123'
        url = urljoin(self.url, '/'.join(('basic-auth',) + data))
        print(data)
        r = requests.get(url, auth=(data)).json()
        print(r)
        assert r['user'] == data[0]

    def test_basicauth_n(self):
        data = ('aa', '123')
        url = urljoin(self.url, '/'.join(('basic-auth',) + data))
        r = requests.get(url, auth=('aa', 'bb'))
        assert r.status_code == 401

    def test_bearer_y(self):
        headers = {'Authorization': 'justtestauth'}
        url = urljoin(self.url, 'bearer')
        r = requests.get(url, headers=headers)
        assert r.status_code == 200
        r = r.json()
        assert r['token'] == headers['Authorization']

    def test_bearer_n(self):
        headers = {}
        url = urljoin(self.url, 'bearer')
        r = requests.get(url, headers=headers)
        assert r.status_code == 401

运行pytest命令

  • 运行pytest命令直接查看结果:
pytest -q run.py
  • 运行pytest命令生成测试报告:
pytest -q --tb=no --html=E:\python_interface_test\results\makehtml.html

总结

  • 在一个py文件中编写了一堆用例,并且能够输出报告了,终于踏出了第一步
  • 缺点说明:
    1、没有进行数据隔离:接口、请求参数、断言数据都在同一文件中;
    2、不能设置配置信息:如测试地址改变等,不能直接通过配置文件修改;
    3、没有记录日志信息:没有记录接口的执行信息,如果出现bug,无法提供定位信息;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,566评论 18 139
  • 目录 Python接口测试课程(第一天)-Python基础Python接口测试课程(第二天)-接口测试快速实践Py...
    韩志超阅读 4,967评论 2 26
  • 一、简介 本文从一个简单的登录接口测试入手,一步步调整优化接口调用姿势,然后简单讨论了一下接口测试框架的要点,最后...
    鱼鱼1987阅读 6,081评论 0 55
  • 风吹来神的种子 未经灌溉长成了爱 那谁拿起蓝色马鞍的奔腾 唤醒一丝幽幽的尘埃 舍不得闭上眼 所以眼泪顺势而出 风也...
    Life零絮阅读 231评论 0 0
  • 从招聘会结束之后,就开始了公务员考试培训。生活单一重复,却也很充实,只是就冷落了简书和小说的更新。终于25号...
    Daosy_氵阅读 373评论 0 1