Python接口测试入门

接口测试基础篇

用几个简单的案例,带你轻松了解接口测试

首先了解一下接口测试的重要性:

接口测试有什么要求呢?

首先需要清晰的接口文档,标准如下:

  • 接口名称
  • 接口类型
  • 输入参数
  1. 每个参数名;
  2. 每个参数类型;
  3. 每个参数业务含义;
  4. 每个是否可空;
  5. 每个字段长度(可选,一般需要提供,有严格要求的字段需特别注明);
  • 输出参数

    状态码;

    提示信息;

    每个参数名,每个参数类型;

    每个参数业务含义;

    每个字段长度;

接口通用基本要求:(借鉴别人的总结)

  1. 返回json字段信息,不可出现 关键字类型,如 object,interface,public,java等各类语言代码中关键字类型
  2. 涉及金额等信息时应采取加密方式,后端需进行校验,防止通过接口拦截造成损失
  3. 涉及交易收付款时,后端需进行幂等校验
  4. HTTPS方式传输
  5. 请求方式,一般获取数据是get,提交表单是post
  6. 信息存取可采取对称加密和非对称加密的结合(可选,也可选一种)
  7. 接口进行手机号正则验证,字符串和上传文件图片等提前规划大小限制
  8. 检查数据正确性,每个接口从数据存取数据等是否正确,是否在正确的数据库表取数据等
  9. 为空等验证一定要做,正确状态码和错误状态码一定全部记录下来,状态码代表的意思等

接下来用几个简单的案例开始接口测试之旅

准备工作:

案例一:发送一个get请求

import requests

# 请求的链接
url = 'https://dgateway.allhome.com.cn/organization/v1/basic/people/position/dictionaryList?postId=0'
# 发送get请求
r = requests.get(url)
# 请求的状态码 200代表成功
status = r.status_code
print(status)
# 请求的内容
j = r.json()

print(j)

输出结果:

案例二:发送一个post请求

import requests
# 请求的链接
url = 'https://dgateway.allhome.com.cn/organization/v1/basic/people/level/list'

# post请求以字典格式传入
data = {
    "pageInfo": {
        "page": 1,
        "size": 3
    },
    "query": {
        "postId": ""
    }
}

# 发送post请求
r = requests.post(url, data)

# 请求的状态码 200代表成功
status = r.status_code
print(status)

输出结果:

import requests
# 请求的链接
url = 'https://dgateway.allhome.com.cn/organization/v1/basic/people/level/list'

# post请求以字典格式传入
headers = {"Content-Type": "application/json"}
data = {
    "pageInfo": {
        "page": 1,
        "size": 3
    },
    "query": {
        "postId": ""
    }
}

# 发送post请求
r = requests.post(url, data=json.dumps(data), headers=headers)

# 请求的状态码 200代表成功
status = r.status_code
print(status)

# 请求的内容
print(r.content)

输出结果:

思考:对requests获取的原始数据,有几种形式?

https://www.jianshu.com/p/0e0336b370f3

案例三:接口状态码断言

import requests

# 请求的链接
url = 'https://dgateway.allhome.com.cn/organization/v1/basic/people/position/dictionaryList?postId=0'
# 发送请求
r = requests.get(url)

# 请求的状态码 200代表成功
status = r.status_code

# 进行接口的状态码断言,等于200则认为通过,不是200不通过
if status == 200:
    print('用例测试通过')
else:
    print('测试不通过')

print(status)
# 请求的内容
j = r.json()
print(j)

输出结果:

案例四:接口内容断言-正常情况

import requests

# 请求的链接
url = 'https://dgateway.allhome.com.cn/organization/v1/basic/people/position/dictionaryList?postId=0'
# 发送请求
r = requests.get(url)
# 请求的状态码 200代表成功
status = r.status_code
# 进行接口的状态码断言,等于200则认为通过,不是200不通过
if status == 200:
    print('用例测试通过')
else:
    print('测试不通过')
print(status)
# 请求的内容
j = r.json()
# 判断接口返回内容里面,有没有 权证部 内容
if '权证部' in str(j):
    print('存在此数据')
else:
    print('不存在此数据')
print(j)

输出结果:

案例五:接口内容断言-异常情况

判断接口返回内容里面,有没有 ‘权证部测试’ 内容

import requests

# 请求的链接
url = 'https://dgateway.allhome.com.cn/organization/v1/basic/people/position/dictionaryList?postId=0'
# 发送请求
r = requests.get(url)
# 请求的状态码 200代表成功
status = r.status_code
# 进行接口的状态码断言,等于200则认为通过,不是200不通过
if status == 200:
    print('用例测试通过')
else:
    print('测试不通过')
print(status)
# 请求的内容
j = r.json()
# 判断接口返回内容里面,有没有 权证部测试 内容
if '权证部测试' in str(j):
    print('存在此数据')
else:
    print('不存在此数据')
print(j)

输出结果:

讲到这里已经知道如何发送请求,如何使用断言;学习完大家还需要多敲多练。
思考:当url、path、data发生变化每次都需要更改代码是不是很麻烦!有什么办法可以解决吗?
案例六:封装接口-将接口和逻辑代码分开控制**

  • 增加config.py存放接口
# baseurl 一般接口都是分测试接口和正式接口的,只需要修改ip即可
baseurl = 'https://dgateway.allhome.com.cn'

# 职级字典表接口
url_dictionaryList = baseurl + '/organization/v1/basic/people/position/dictionaryList?postId=0'
  • 增加testapi.py
# 发送请求 使用config.来调用想要的接口 调用职级字典表
r = requests.get(config.url_dictionaryList)

# 请求的状态码 200代表成功
status = r.status_code

# 进行接口的状态码断言,等于200则认为通过,不是200不通过
if status == 200:
    print('状态码校验过')
else:
    print('状态码校验不通过')
print(status)

# 请求的内容
j = r.json()

# 判断接口返回内容里面,有没有 权证部 内容
# 权证部  增加了一个1
if '权证部' in str(j):
    print('存在此数据')
else:
    print('不存在此数据')
print(j)

输出结果:

练习到这个案例,会发现将接口封装后,每次接口链接变了,只需要修改config文件即可

案例七:封装接口-将接口和逻辑代码分开控制

上面讲到了如何将url与逻辑代码分开控制,但如果是post接口的话,参数也要进行分离

下面我们要对config.py进行修改

# baseurl 一般接口都是分测试接口和正式接口的,只需要修改ip即可
baseurl = 'https://dgateway.allhome.com.cn'

# 职级字典表接口
url_dictionaryList = baseurl + '/organization/v1/basic/people/position/dictionaryList?postId=0'

# 查询职级列表接口
url_list = {
    '接口': baseurl + '/organization/v1/basic/people/level/list',
    'headers': {"Content-Type": "application/json"},
    'data': {
        "pageInfo": {
            "page": 1,
            "size": 3
        },
        "query": {
            "postId": ""
        }
    }
}

testapi.py修改

import requests
# 引入config配置接口的文件
import config
import json

# 发送post请求,通过config文件获取接口url 和接口的参数 ,如果参数更改了,咱们就修改config文件就可以了
url = config.url_list['接口']
data = config.url_list['data']
headers = config.url_list['headers']

r = requests.post(url, data=json.dumps(data), headers=headers)

# 请求的状态码 200代表成功
status = r.status_code

# 进行接口的状态码断言,等于200则认为通过,不是200不通过
if status == 200:
    print('状态码校验过')
else:
    print('状态码校验不通过')

# 输出状态码
print(status)

# 因为展示测试的接口没有json,所以只能输出content啦~
print(r.content)

输出结果:

总结:用到了 字典? 的小知识点,还用到了 引用包 的小知识点(网上资料特别多,不懂的可以自己查阅资料)

这个案例讲完已经学会了使用 config 分开控制接口和逻辑代码,本次课程也就结束了!大家课后要先复习本次课程讲解的内容,查阅相关的资料进行巩固。感谢大家的捧场,希望大家共同学习共同进步!

温馨提示:下一节我们将会学到如何对接口进行封装、引用unittest测试框架进行断言、生成测试报告

原文地址:https://www.cnblogs.com/wyunuo/p/11442217.html

时间: 2024-08-10 10:37:03

Python接口测试入门的相关文章

python接口测试入门1-什么是接口测试

为什么要做接口测试 在日常开发过程中,有人做前端开发,有人负责后端开发.接口就是连接前后台,由于前端开发和后端开发的速度可能不一样,例如后端开发好了,但是前端没有开发.那么我们是不是就不需要测试呢?一般我们大部分人都是做功能测试,很多是界面的功能测试.如果你理解了接口测试,那么你就可以针对接口进行测试看看测试金字塔,接口测试是在中间部分,底层是单元测试,最顶端是界面测试.从三者的面积大小来看,单元测试和接口测试,才是重点,而界面测试真的是太少.这个面积,你可以理解为代码覆盖,也可以理解为测试的工

Python爬虫入门七之正则表达式

在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Python同样不例外,利用了正则表达式,我

转 Python爬虫入门七之正则表达式

静觅 » Python爬虫入门七之正则表达式 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. 正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Python同样不例外,利用了正则表达式,我们想要从返回的页面内容提取出我们想要的内容就易如反掌了. 正则表达式的大致匹配过程是:1.依次拿出表达式和文本中的字符比较,2.如果每一个

Python爬虫入门六之Cookie的使用

大家好哈,上一节我们研究了一下爬虫的异常处理问题,那么接下来我们一起来看一下Cookie的使用. 为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密) 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么我们可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他页面就达到目的了. 在此之前呢,我们必须先介绍一个opener的概念. 1.Opener 当你获取一个

(原)python爬虫入门(2)---排序爬取的辽宁科技大学热点新闻

发现科大网页的源码中还有文章的点击率,何不做一个文章点击率的降序排行.简单,前面入门(1)基本已经完成我们所要的功能了,本篇我们仅仅需要添加:一个通过正则获取文章点击率的数字:再加一个根据该数字的插入排序.ok,大功告成! 简单说一下本文插入排序的第一个循环,找到列表中最大的数,放到列表 0 的位置做观察哨. 上代码: # -*- coding: utf-8 -*- # 程序:爬取点击排名前十的科大热点新闻 # 版本:0.1 # 时间:2014.06.30 # 语言:python 2.7 #--

【Python】入门 list有些不懂

#-*- coding: cp936 -*-  #首行加这个 代码里就可以加注释 raw_input("Press Enter Exit")  #最后一行加这个,可以直接点击脚本运行脚本 l[a:b] = [c] #即用右边的[c]完全替换a到b-1个元素 http://www.cnblogs.com/zhengyuxin/articles/1938300.html python list 操作 http://blog.csdn.net/sunvince/article/details

转 Python爬虫入门二之爬虫基础了解

静觅 » Python爬虫入门二之爬虫基础了解 2.浏览网页的过程 在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以及百度搜索框,这个过程其实就是用户输入网址之后,经过DNS服务器,找到服务器主机,向服务器发出一个请求,服务器经过解析之后,发送给用户的浏览器 HTML.JS.CSS 等文件,浏览器解析出来,用户便可以看到形形色色的图片了. 因此,用户看到的网页实质是由 HTML 代码构成的,爬虫爬来的便是这些内容

转 Python爬虫入门一之综述

转自: http://cuiqingcai.com/927.html 静觅 » Python爬虫入门一之综述 首先爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 要学习Python爬虫,我们要学习的共有以下几点: Python基础知识 Python中urllib和urllib2库的用法 Python正则表达式 Python爬虫框架Scrapy Python爬虫更高级的功能 1.Pyth

Python开发入门与实战1-开发环境

1.搭建Python Django开发环境 1.1.Python运行环境安装 Python官网:http://www.python.org/ Python最新源码,二进制文档,新闻资讯等可以在Python的官网查看到. Python3.0已经发布,本文我们使用Django作为对象映射层,Django暂时还不支持3.0版本,本文我们以Python 2.7 Windows 8 64位版本为例.下载安Windows X86-64 MSI Installer (2.7.7) [1]安装包,运行安装文件.