接口测试 ★ ✔【接口测试理论、http协议、接口测试文档解析、Postman使用、接口测试用例设计、Request库、UnitTest框架、】

接口测试

接口测试-第01天(接口测试理论、HTTP协议、接口测试流程、接口文档解析)

学习⽬标

能够分析HTTP协议的请求和响应数据

完成ihrm系统指定接⼝的API⽂档解析

接⼝测试理论

概念

接⼝:系统之间(外部系统与内部系统,内部系统与内部系统)数据交通的通道。

接⼝测试:校验 接⼝回发的 响应数据 与 预期结果 是否⼀致。

接⼝测试,可以绕过前端界⾯。直接对 服务器进⾏测试!!!

作用 ★

可以发现⻚⾯测试发现不了的问题

符合 质量控制前移理念

低成本,⾼收益!

实现⽅式 ★

  • ⼯具:
    • postman:使⽤简单,上⼿难度低。功能较少。
    • jmeter:使⽤难度较⼤。上⼿难度⼤。功能⻬全。
  • 代码:
    • Python + requests + Unittest
    • java + HttpClient

HTTP协议 ★

协议:就是 规则!要求使⽤协议的双⽅必须 严格 遵守

HTTP协议简介

简介:超⽂本传输协议,基于请求与响应的 应⽤层协议。

特点:

  1. 客户端、服务器模式
  2. 简单快速
  3. 灵活
  4. ⽆连接
  5. ⽆状态

URL格式 ★

完整语法格式:协议 😕/ IP地址:端⼝号/资源路径?查询参数

  • 协议:
    • http、https。 作⽤:指定数据传输规则
  • IP地址:
    • 也就是 域名。 作⽤:在⽹络环境中,唯⼀定位⼀台主机
  • 端⼝号:
    • 作⽤:在 主机上,唯⼀定义个应⽤程序。
    • 可以省略。如果省略,跟随协议。 http - 80 。 Https - 443
  • 资源路径:
    • 作⽤:应⽤对应的数据资源。
    • 可以省略。如果省略,资源路径为 "/"
  • 查询参数:
    • 作⽤:给资源传递参数
    • 可以省略。如果省略,没有 ?分割符。
    • 可以有多组。每组 k=v 格式。各组之间 ⽤ "&" 隔分。
练习

请写出以下URL的各个组成部分。这个URL没有写出端⼝号,它的端⼝是什么?

http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=do_login

HTTP请求 ★

产⽣端:

  • ⼀定产⽣于 客户端。当 客户端给服务器发送请求时,使⽤该协议。(请求报⽂、请求包)
整体格式
请求⾏ ★
请求头
请求体
练习1
练习2

HTTP响应 ★

整体格式
状态⾏


响应头
响应体
练习1
练习2

ihrm项⽬介绍

接⼝规范

传统⻛格接⼝

RESTful⻛格接⼝

⼩结

接⼝测试流程 ★


接⼝⽂档解析 ★

什么是接⼝⽂档

接⼝⽂档的作⽤

解析接⼝⽂档 ★

练习

接口文档介绍

思维导图

作业

1,请简述接口的概念?

答案:

yacas 复制代码
接口,是数据交互的通道。用来实现 系统 之间的数据交互。
2,请简述接口测试的概念

答案:

yacas 复制代码
接口测试,主要是对系统之间的接口进行测试。校验接口响应数据是否与预期数据一致。
3,为什么要进行接口测试?(价值)

答案:

yacas 复制代码
1. 质量控制前移
2. 可以发现一些页面测试发现不了的问题。
3. 低成本高效益
4,我们可以使用哪些方式来实现接口测试?

答案:

yacas 复制代码
工具实现:postman、jmeter
代码实现:Python + Requests 	 或	java + HttpClient
5,请写出HTTP协议的5个特点

答案:

yacas 复制代码
1. 支持客户端/服务器模式
2. 简单快速
3. 灵活
4. 无连接
5. 无状态
6,写出URL的格式,由哪 5 部分组成?

答案:

yacas 复制代码
协议://域名:端口/资源路径?查询参数&查询参数&...
7,请写出 URL http://www.itcast.cn/subject/pythonzly/index.shtml?a=1\&b=2 中,每个部分的内容

答案:

yacas 复制代码
协议:http
域名:www.itcast.cn
端口:80
资源路径:/subject/pythonzly/index.shtml
查询参数:a=1&b=2
8,一个只有资源路径和查询参数的字符串,按URL规则解析时,查询参数有哪些,用什么符号隔分?

/seeyon/meeting.do?method=create&listMethod=listMyMeeting

答案:

yacas 复制代码
method=create 和 listMethod=listMyMeeting 
用 & 隔分
9,以下关于HTTP请求的描述,错误的是?

A: HTTP请求包括了请求行,请求头,请求体

B: HTTP请求行包括协议/版本,URL,请求方法

C: HTTP请求头用于描述客户端信息

D: User-Agent 描述客户端浏览器类型。 Content-Type 描述请求体数据类型。
E: HTTP请求中,只有Post请求才有请求体。Put请求 也可以有请求体

F: HTTP请求中,按照标准规范,请求的数据类型是由Content-Type来进行标志的。

答案

yacas 复制代码
D. 说明:User-Agent 描述客户端浏览器类型。 Content-Type 描述请求体数据类型。
E. 说明:Put请求 也可以有请求体
10,在HTTP请求中,有哪些常用的请求方法?

答案:

yacas 复制代码
GET、POST、PUT、DELETE
11,HTTP响应主要包括哪几个部分?

答案:

yacas 复制代码
状态行、响应头、空行、响应体
12,简述接口测试流程。

答案:

yacas 复制代码
1,需求分析
2,解析接口文档
3,设计接口测试用例
4,执行接口测试用例
5,接口缺陷管理和跟踪
6,生成测试报告
7,接口自动化测试和持续集成
13,有如下 http请求,请分别写出 请求方法、URL、协议和域名、资源路径、请求行、请求头、请求体。
http 复制代码
POST http://demo.zentao.net/user-login.html HTTP/1.1
Host: demo.zentao.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://demo.zentao.net/user-login.html
Content-Type: application/x-www-form-urlencoded
Content-Length: 54
Connection: keep-alive
Upgrade-Insecure-Requests: 1

account=demo&password=efc4a3b32e48054865e5a8321cfda3e4

答案:

yacas 复制代码
请求方法: post
URL: http://demo.zentao.net/user-login.html
协议和域名: http://demo.zentao.net
资源路径: user-login.html
请求行: POST http://demo.zentao.net/user-login.html HTTP/1.1
请求头:
Host: demo.zentao.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://demo.zentao.net/user-login.html
Content-Type: application/x-www-form-urlencoded
Content-Length: 54
Connection: keep-alive
Upgrade-Insecure-Requests: 1

请求体:
account=demo&password=efc4a3b32e48054865e5a8321cfda3e4
14,有如下 http 响应包,请分别写出 响应状态码、状态码描述、状态行、响应头、响应体的内容。
http 复制代码
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8

<html>
	<head></head>
	<body>...</body>
</html>

答案:

yacas 复制代码
响应状态码: 200
状态码描述: OK
状态行: HTTP/1.1 200 OK
响应头:
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
响应体:
<html>
	<head></head>
	<body>...</body>
</html>
15,查看 《iHRM人力资源管理系统-API文档.pdf》中 "3.员工管理" 下的 "员工修改" 接口。写出:请求方法、资源路径、协议和域名、URL、请求行、请求头、请求体(请求体内容,任意举例一二即可)

答案:

yacas 复制代码
请求方法: put
URL: http://ihrm-test.itheima.net/api/sys/user/:target
协议和域名: http://ihrm-test.itheima.net
请求行: put http://ihrm-test.itheima.net/api/sys/user/:target HTTP/1.1
请求头: 
Content-Type: application/json
Authorization: Bearer f5050a1b-7919-444c-9ec4-3c1a7286536d
请求体:
{"username":"欧阳踹踹"}

接口测试-第02天(postman、接口用例设计、单接口用例、业务场景用例)

学习⽬标

能够使⽤Postman发送get/post/put/delete请求并获取响应结果

掌握接⼝测试⽤例设计⽅法

能独⽴完成ihrm系统登录/员⼯管理相关接⼝⽤例设计

Postman基础使⽤

简介和安装

案例⼀

【传递查询参数】:访问TPshop搜索商品的接⼝,搜索关键字iPhone,并查看响应数据


案例⼆

【提交表单数据】:使⽤ Postman 向 tpshop 商城 登录接⼝ 发送 登录请求


案例三

【提交JSON数据】:发送IHRM项⽬的登录接⼝请求并查看响应结果

接⼝⽤例设计 ★

接⼝测试的测试点 ★(功能测试、性能测试、安全测试)

  1. 功能测试
    • 单接口功能测试:一个单独的业务,就对一个独立的接口。如:登录业务,对应登录接口。
    • 业务场景功能测试:多个接口被连续调用。(模拟用户的实际使用场景)
  2. 性能测试
    • 响应时长:从发送请求到接收到服务器回发响应包所经历的时间。
    • 错误率:服务器运行出错的概率
    • 吞吐量:服务器单位时间内,处理请求的数量。
    • 服务器资源利用率:cpu、内存、网络、磁盘等 硬件资源的占用率。
  3. 安全测试
    • 攻击安全:木马、病毒
    • 由具备专业安全技术,会使用专业安全测试工具的 安全测试工程师 负责
    • 业务安全:
      • 必须登录,才能访问 用户数据。
      • 敏感数据加密存储。

接⼝⽤例设计⽅法 ★

单接⼝测试 ★

一个单独的业务,就对一个独立的接口。如:登录业务,对应登录接口。注册业务,对应注册接口。支付业务,对应支付接口。

  • 正向:
    • 必选 参数。所有必选项,给正确数据
    • 组合 参数。所有必选+任意可选,给正确数据。
    • 全部 参数。所有必选+所有可选。给正确数据,
  • 反向:
    • 功能异常:数据格式正确,不能履行接口功能。
    • 数据异常:数据格式不正确(空值、特殊字符、汉字、字母、长度、范围 ... 等价类、边界值)
    • 参数异常:
      • 多参:多出 必选参数
      • 少参:缺少 必选参数
      • 无参:没有 指定参数
      • 错误参数:参数名 错误。
业务场景测试 ★

一定在 单接口 测试 之后:

  • 尽量模拟用户实际使用场景,
  • 尽量用最少的用例,覆盖最多的接口请求。
  • 一般情况下,覆盖正向测试即可。
单接⼝测试⽤例 ★


业务场景测试⽤例 ★

思维导图

作业

1,关于接口测试点设计,以下描述正确的有:

A:接口测试可以对单接口以及多个接口关联的业务场景进行测试。

B:接口测试可以对性能,安全等测试点进行测试。

C:接口测试用例需要对接口的请求参数进行设计,测试全部参数、组合参数、必填参数的正向测试;以及反向的多参、少参、无参、错误参数测试;

D:设计的接口测试用例,有部分会与手工测试用例重复。

答案:

yacas 复制代码

2,关于接口用例的设计思路,以下描述正确的有:

A:可以对接口的参数进行测试,包括了异常的多参、少参、无参、错误参数和正向的必填参数,组合参数,全部参数。

B:可以对接口的数据进行测试,包括正确的数据和异常的数据。设计登陆接口的登陆成功案例和用户名中有特殊字符等案例。

C:可以对接口的依赖关系进行测试,如:业务系统需求设计为需要先登陆才能添加员工,那么我们可以设计正向的和反向的用例,分别测试登陆后添加员工和没有登陆时添加员工。

D:我们必须测试接口的域名错误场景,模拟域名不正确时,是否能正确调用接口。

答案:

yacas 复制代码

3,请使用Postman发送Get请求获取深圳天气接口的返回结果,并填写响应结果

接口名称:查询深圳天气

接口协议:http

请求方式:Get

请求域名:www.weather.com.cn

请求路径:/data/sk/101280601.html

请求头:

请求体:无

答案:(注意:由于天气会经常变更,所以只要返回的json数据只要结构一致即可)

text 复制代码

4,请使用Postman调用ihrm的登陆接口,写出具体的实现步骤和返回结果

接口名称:ihrm登陆

接口协议:http

请求方式:Post

请求域名:ihrm-test.itheima.net

请求路径和参数:/api/sys/login

请求头:Content-Type: application/json

请求体:{"mobile":"13800000002","password":"123456"}

答案:

python 复制代码

5,有一个添加部门接口,详情如下,请根据下面接口文档,设计 "添加部门" 接口的单接口测试用例。

接口名称 添加部门
接口路径 /api/company/department
接口域名 ihrm-test.itheima.net
请求头 {"Content-Type":"application/json","Authorization":"Bearer xxxx-xxxx-xxxx-xxxx"}
请求参数 {"name":"测试部","code":"00001","manager":"Tom","introduce":"部门介绍","pid":"000000"}
返回数据 {"success":true,"code":10000,"message":"操作成功!","data":null}

详细请求参数:

名称 类型 是否必须 默认值 备注
name string 必须 名称
code string 必须 编号
manager string 非必须 部门负责人姓名
introduce string 非必须 部门介绍
pid string 非必须 父级部门ID,没有为空

返回数据:

  • 操作成功响应状态码:200
  • 错误码描述:
    • 10000:操作成功!
    • 99999:抱歉,系统繁忙,请稍后重试!

答案:

text 复制代码

6,根据接口测试用例设计思想,仿照课堂实现的 登录、添加员工 接口测试用例,借助《ihrm人力资源管理系统-API文档.pdf》完善 "查询员工"、"修改员工"、"删除员工" 及 "查询员工列表" 接口相关测试用例!

yacas 复制代码

接口测试-第03天(Postman断言、关联、参数化)

今日学习目标

能够使用Postman对响应结果自动断言

能够使用Postman处理关联数据

能够使用Postman进行接口参数化处理

Potman 断言 ★

Postman 断言简介

让 Postman工具 代替 人工 自动判断 预期结果 和 实际结果 是否一致断言代码 书写在 Tests 标签页中。 査看断言结果 Test Resuit标签页

Postman 常用断言

1. 断言响应状态码


2. 断言包含某字符串


3. 断言JSON数据

Postman 断言工作原理

Postman 关联 ★

简介

当接口和接口之间,有依赖关系时,需要借助 postman 关联技术,来实现。

如: 登录接口 返回的 令牌数据,被 添加员工接口依赖。

添加员工接口 返回 员工id,被 查询员工接口依赖。

实现步骤

核心代码

创建环境


案例1 ★


案例2 ★


Postman 参数化 ★

简介

数据文件简介


编写数据文件

CSV文件
JSON文件

导入数据文件到postman ★

读取数据文件数据

理论
案例(批量查询 手机号 所属运营商,校验运营商数据正确性)


思维导图

作业

1,下文中关于断言的描述正确的是?

js 复制代码
// 测试响应状态码是400
pm.test("测试响应状态码是300", function(){
    pm.response.to.have.status(200)
});

A:判断接口返回的响应状态码是不是300

B:判断接口返回的响应状态码是不是200

C:判断接口返回的响应状态码是不是400

D:以上都不正确。这个不是判断http响应状态码的断言。

答案:

yacas 复制代码
B

2,postman提供了常用的断言代码片段,请根据下文中给出断言代码片段和实际代码填入正确的匹配关系

js 复制代码
Status code:Code is 200   ( B )
Response body : Contains string  ( C )
Response body : JSON value check  ( A )
js 复制代码
A : 
pm.test("Test", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.success).to.eql(true);
});

B :
pm.test("Test", function () {
    pm.response.to.have.status(200);
});

C :
pm.test("Test", function () {
    pm.expect(pm.response.text()).to.include("test");
});

3, 假设下列json数据是某接口返回的响应数据,请选出正确选项

json 复制代码
{
    "username":"13800000002",
    "data": {"nickname":"德玛西亚",
    		 "mobile":"13800000002",
        	 "birthday":"123456",
    		 "hobby":{"read":"三体", 
    				 "sport":"basketball"}
			}
}

A :要提取 username 的数据,需要使用 pm.response.json().username

B :要提取 birthday 的数据,需要使用 pm.response.json().birthday

C : 要提取 sport 的数据,需要使用 pm.response.json().data.hobby.sport

D : 以上说法全部错误

答案:

yacas 复制代码
A、C

4,参照课堂 添加员工 案例,使用postman关联技术,实现 ihrm系统的 查询员工。注意有 2 处依赖。

yacas 复制代码

5, 针对ihrm登录接口,将 请求数据 和 断言数据 组织成JSON文件,并使用postman批量运行。测试5条数据即可。

json 复制代码
// login.json 数据文件
[
	{"mobile":"13800000002","password":"123456","code":10000},
	{"mobile":"13800138002","password":"123456","code":20001},
	{"mobile":null,"password":"123456","code":20001},
	{"mobile":"1380013800","password":"123456","code":20001},
	{"mobile":"13800abcd*#","password":"123456","code":20001},
	{"mobile":"13800000002","password":null,"code":20001}
]
js 复制代码
// postman -- body
{"mobile":"{{mobile}}","password":"{{password}}"}
js 复制代码
// postman -- Tests
console.log("预期结果=" + data.code)

pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.code).to.eql(data.code);

    console.log("实际结果=" + jsonData.code);
});

接口测试-第04天(Postman生成测试报告、iHRM项目实战)

学习目标

掌握使用newman生成测试报告的命令

使用Postman完成ihrm系统接口测试

Postman 测试报告 ★

导出用例集

导出环境文件

newman生成测试报告 ★

newman run 第三天作业.postman_collection.json -d login.json -r htmlextra --reporter-htmlextra^Bexport 作业的测试报告.html


iHRM项目实战 ★

初始化项目环境

新建用例集

登录模块

登录成功接口 ★
请求接口
添加断言 ★
其他接口共性分析
实现其他接口

员工管理业务场景

总析
提取令牌 ★
添加员工 ★
提取添加员工的id ★
查询员工 ★
其他员工操作



批量运行测试用例 ★


生成测试报告 ★


思维导图

作业

1,写出在Postman中导出和导入用例集的具体实施步骤?

答案:

shell 复制代码

2, 假设现有用例集 a.json,写出 生成测试报告 myReport.html 的完整命令,并解释命令中各个参数的含义。

答案:

shell 复制代码

3, 完成 iHRM系统 登录模块 和 员工管理业务场景 接口测试,批量运行通过,并生成测试报告!

答案:

text 复制代码

接口测试-第05天(Request库、Cookie、Session、UnitTest框架)

学习目标

能够使用Requests库发送get/post/put/delete请求,获取响应状态码、数据

能够使用UnitTest管理测试用例

Requests库

Requests库安装和简介


设置http请求语法 ★


应用案例 ★

案例1 【带 查询参数 的get请求】使用Requests库,请求 tpshop商城 搜索商品接口。查询 iphone

案例2 【带 表单数据 的post请求】使用Requests库,完成 tpshop商城 登录接口调用。返回 "验证码错误" 即可

案例3 【带 json数据 的post请求】使用Requests库,完成 iHRM系统 成功登录。返回 "令牌数据"

案例4 【发送 put、delete请求】使用Requests库发送 ihrm系统 修改员工信息、删除员工信息 请求

Cookie简介

Cookie+Session认证方式

案例5 - 看演示,此代码不需实现


Session

Session简介

Session自动管理Cookie

案例6 ★【借助session重新实现 上述 TPshop商城登录,并获取 "我的订单" 页面数据】


获取指定响应数据 ★

UnitTest框架

UnitTest框架回顾 ★

TestCase

Fixture

TestSuite

TestRunner


ihrm案例

登录成功 ★

思维导图

作业

作业一

重新实现 python 结束阶段 unittest 框架相关练习。巩固unittest框架知识,为后续课程做准备!

参看 python 阶段课后作业,实现如下综合练习

yacas 复制代码
1. 实现登录测试用例,使用断言判断登录结果
2. 将用例写在 case 目录中
3. 定义 json 文件,保存登录测试数据,将json文件写在data目录中
4. 生成测试报告,报告保存在 report 目录中

参考信息1

针对某网站 登录 功能进行测试,现在需要将 测试数据定义为 json 文件, 以便于在自动化测试中使用. 每一组测试数据应该包含如下信息:

测试描述(标题) desc 用户名username 密码password 验证码code 预期结果expect
正确的用户名和密码 admin 123456 8888 登录成功
不存在的用户名 root 123456 8888 登录失败
错误的密码 admin 123123 8888 登录失败
错误的验证码 admin 123456 9999 登录失败
yacas 复制代码
定义函数 build_data(), 读取 json 文件, 获取 用户名,密码,验证码和预期结果,作为一组数据,组成元组,存入列表 , 即: [('admin', "123456", '8888', '登录成功'), (), (), ()] , 最后将 列表 进行返回. 

参考信息2

python 复制代码
# 假设对某网站的登录进行测试
def login(username, password):
    if username == 'admin' and password == '123456':
        return '登录成功'
    else:
        return '登录失败'
    
# 1. 这个是开发书写的功能代码, 测试号过程中,不能修改 login 函数
# 2. 可以认为这是 tpshop 的登录函数

已知,如下测试数据:
1. 正确用户名和密码: 	  	  admin, 123456, 登录成功
2. 错误用户名: 				root, 123456, 登录失败
3. 错误密码: 			 	 admin, 123123, 登录失败
4. 错误用户名和错误密码: 		 aaa, 123123, 登录失败

作业二

1 使用requests库session机制,实现 tpshop前台用户注册,并注册账号成功。
python 复制代码
# 导包
import requests

# 实例化session
session = requests.Session()

# 使用session发送获取验证码的请求
session.get(url="http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=verify&type=user_reg")

# 使用session发送注册的请求
response = session.post(url="http://tpshop-test.itheima.net/Home/User/reg.html",
                         headers={"Content-Type":"application/x-www-form-urlencoded"},
                         data={"scene":"1",
                               "username":"13822138012",
                               "verify_code":"8888",
                               "password":"123456",
                               "password2":"123456",
                               "invite":""})
# 打印注册的结果
print("注册的结果为:", response.json())
2 使用unittest框架,结合requests库,在框架中完成tpshop登录接口测试,添加 "登录成功" 断言。
1. 编写case测试
python 复制代码
# 待测函数
def login(username, password):
    if username == 'admin' and password == '123456':
        return '登录成功'
    else:
        return '登录失败'


# 读取json文件数据
def build_data():
    with open(BASE_DIR + '/data/login_data.json', 'r', encoding='utf8') as f:
        json_data = json.load(f)  # [{}, {}, {}] ---> [(), (), ()]

    new_list = []  # 创建一个空列表
    for data in json_data:  # data 为字典 数据
        a = tuple(data.values())  # 取 字典的 values 部分,组成元组
        new_list.append(a[1:])  # 剔除 desc 这个 key 对应的 value,将剩余内容,存入空列表

    return new_list  # 循环结束,将 装满 元组的列表 [(), (), ()] 返回


class TestLogin(unittest.TestCase):
    @parameterized.expand(build_data())
    def test_login(self, username, pwd, code, expect):
        ret = login(username, pwd)
        self.assertEqual(expect, ret)
2. 组装套件
python 复制代码
# 2. 创建 测试套件实例
suite = unittest.TestSuite()   # () 不能丢!千万不能丢!

# 3. 测试套件实例,调用 addTest() ,组装测试用例。
suite.addTest(unittest.makeSuite(TestLogin))

# 4. 指定 生成的测试报告的 路径 和 名称
report_path = BASE_DIR + '/report/login测试报告.html'  # 指定目录,如果目录不存在,会报错。 报告的后缀名,必须是 html

# 5. 创建 HTMLTestReport 类的实例,同时,使用上面指定好的报告名、标题(可选)、描述(可选)
ht_report = HTMLTestReport(report_path, title='登录测试报告',
                           description='没有使用验证码,对登录进行测试')

# 6. 运行测试套件组装的测试用例,生成报告
ht_report.run(suite)
3 使用unittest框架,结合requests库,在框架中完成tpshop注册接口测试,添加 "注册成功" 断言。
python 复制代码
# 导包
import unittest
import requests


class TestTsphopRegist(unittest.TestCase):

    def setUp(self):
        # 实例化session
        self.session = requests.Session()
        self.url = "http://tpshop-test.itheima.net/Home/User/reg.html"
        self.headers = {"Content-Type": "application/x-www-form-urlencoded"}

    def tearDown(self):
        # 关闭Session
        self.session.close()

    # 将session实现注册的代码拷贝到框架中
    def test01_regist(self):
        # 使用session发送获取验证码的请求
        resp_verify = self.session.get(
            url="http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=verify&type=user_reg")
            
        # 断言响应头中包含 image
        self.assertIn('image', resp_verify.headers.get('Content-Type'))

        # 使用session发送注册的请求
        response = self.session.post(url=self.url, headers=self.headers,
                                     data={"scene": "1",
                                           "username": "13822138017",
                                           "verify_code": "8888",
                                           "password": "123456",
                                           "password2": "123456",
                                           "invite": ""})
        # 断言 响应状态码 200
        self.assertEqual(200, response.status_code)
        # 断言 响应体 status 1
        self.assertEqual(1, response.json().get('status'))
        # 断言 响应体 msg 登录成功
        self.assertEqual('注册成功', response.json().get('msg'))

        # 打印注册的结果
        print("注册的结果为:", response.json())

接口测试-第06天(PyMySQL增删改查、工具类封装、ihrm删除接口)

学习目标

知道数据库操作的应用场景

掌握PyMySQL对数据库实现增、删、改、查

数据库工具类封装

数据库操作应用场景 ★

PyMySQL操作数据库

安装PyMySQL

操作步骤 ★

事务的概念 ★


PyMySQL连接数据库 ★

建立连接方法 ★
入门案例 查询数据库,获取MySQL服务器 版本信息

PyMySQL操作数据库

SQL 语法回顾
数据库查询 ★
查询操作流程
cursor游标
常用方法 ★
案例
查询t_book表,获取 第一条 数据
查询t_book表,获取 前两条 数据
查询t_book表,获取 全部 数据
查询t_book表,获取 第3条和第4条 数据
sql 复制代码
# 1. 导包
import pymysql
# 2. 建立连接
conn = pymysql.connect(host="211.103.136.244", port=7061, user="student",
password="iHRM_student_2021", database="test_db", charset="utf8")
# 3. 获取游标
cursor = conn.cursor() # 指向 0 号位置。
# 4. 执行 sql 语句(查询)--- t_book
cursor.execute("select * from t_book;")
# 5. 获取结果 - 提取第一条
res1 = cursor.fetchone()
print("res1 =", res1)
# 修改游标位置:回零
cursor.rownumber = 0
# 5. 获取结果 - 提取前 2 条
res2 = cursor.fetchmany(2)
print("res2 =", res2)
# 修改游标位置:回零
cursor.rownumber = 0
res3 = cursor.fetchall()
print("res3 =", res3)
# 修改游标位置:指向第 2 条记录
cursor.rownumber = 2
res4 = cursor.fetchmany(2)
print("res4 =", res4)
# 6. 关闭游标
cursor.close()
# 7. 关闭连接
conn.close()
异常捕获 ★
数据库UID ★
更新操作流程
案例单独实现如下操作: ①:新增一条图书数据(id:5 title:西游记 pub_date:1986-01-01 ) ②:把图书名称为'西游记'的阅读量加一 ③:删除名称为'西游记'的图书

数据库工具类封装

封装的目的

设计数据库工具类 ★★

实现类方法 ★★

获取、关闭连接
查询一条记录
增删改数据
完整封装代码实现 ★★★

思维导图

作业

1,简述PyMySQL操作数据库步骤

答案:

yacas 复制代码
2,写出 PyMySQL 连接数据库的 基本语法。要求写出主要参数的含义。

答案:

yacas 复制代码
3,请使用pymysql完成以下需求:
  • 向 t_book 表插入一本书,书名为《Python从入门到放弃》,阅读量为50,评论量为0,发布日期为:2020-01-01
  • 测试工程师发现一个bug,该书的评论数与实际不符,要求你把评论量修改为修正后的值:250
  • 老板投资了Python,觉得这本书名太不吉利,需要下架,请删除这本书。
  • 你删除后,心中不放心到底有没有删除,想确认是否真正删除了,你需要怎么做?

答案:

python 复制代码
4,仿照课堂演示代码,封装数据库工具类DBUtil。

接口测试-第07天(接口对象封装思想、tpshop商城、iHRM登录接口封装)

学习⽬标

掌握接⼝对象封装的思想和实现

接⼝对象封装

解决的问题

核⼼思想:代码分层

封装Tpshop商城

普通⽅式实现

登录接⼝对象层

登录接⼝测试⽤例层

封装断⾔⽅法

封装iHRM登录

登录接⼝

普通⽅式实现
登录接⼝对象层
登录接⼝测试⽤例层
封装断⾔⽅法

Tpshop商城参数化

准备⼯作

参数化步骤

代码实现

思维导图

作业

作业一

参照课堂讲解的 Tpshop商城 "登录" 案例,修改《接口测试-第05天-作业.md》作业二。

将 "注册接口" 封装到 RegisterApi 类中。编写测试用例脚本,调用自己封装的API 测试注册接口!

要求添加 如下 测试:

  • 注册成功
  • 账号(手机号)已存在
  • 两次输入密码不一致

要求断言接口测试结果

【特别提示】:每个注册接口的测试,应该在不同的会话中!


作业二

已知数据: [ {'a': 1, 'b': 2, 'c': 3}, {'a': 4, 'b': 5, 'c': 6}, {'a': 7, 'b': 8, 'c': 9} ] 存储在 test.json文件中。 编写代码,先从json文件中读取该数据,然后从 数据中提取所有 字典的 value值,重新组合成 [ (1,2,3), (4,5,6), (7,8,9) ] 类型的数据。

【实现思路】:

  1. 打开json文件,读取内部数据,保存在变量中。with open() 结合 json.load()
  2. 循环遍历 列表,依次取出每一个字典元素。
  3. 从字典元素中只取 value 值。value()
  4. 将 value 值转换为元组数据。tuple()
  5. 将 元组追加到 空 [ ] 。append()

【提示】:10行左右python代码即可实现此题。

java 复制代码
def read_json_data():
    list_data = []
    # 从 .json 文件中,读取 [{},{},{}] 数据
    with open("./params_data.json", "r", encoding="utf-8") as f:
        data = json.load(f)

        for item in data:
            tmp = tuple(item.values())
            list_data.append(tmp)

    return list_data

作业三:预习

以下为日志常用代码。尝试阅读,结合讲义《09-日志收集.pdf》大致看懂以下代码片段包含哪几部分内容。

python 复制代码
"""
日志相关代码
"""

import os
import logging.handlers

# 获取项目目录为"根"目录
BASE_DIR = os.path.dirname(__file__)

# 定义 初始化日志代码 相关函数
def init_log_config():
    # 创建日志器对象
    logger = logging.getLogger()

    # 设置日志级别 -- 大于info级别,都写入 日志文件
    logger.setLevel(logging.INFO)

    # 创建日志处理器对象(控制台)
    console_handler = logging.StreamHandler()

    # 创建日志处理器对象(日志文件)
    file_path = BASE_DIR + '/log/ihrm.log' 
    file_handler = logging.handlers.TimedRotatingFileHandler(file_path,                                                             when='midnight',interval=1, backupCount=15,encoding='UTF-8')

    # 创建格式化器 - () 里面的 关键字 千万别写错!
    fmt_str = '%(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s'
    fmt = logging.Formatter(fmt_str)

    # 设置使用格式化器
    console_handler.setFormatter(fmt)
    file_handler.setFormatter(fmt)

    # 添加到日志中
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)

if __name__ == '__main__':
    init_log_config()
    logging.info('普通信息')
    logging.error('错误信息')

接口测试-第08天(接口自动化测试框架、参数化、数据库操作类封、员工管理接口自动化框架)

今日学习目标

能够提取测试脚本中的测试数据,实现测试数据参数化

能够对员工管理接口实现接口对象封装,并编写测试脚本

接口自动化测试框架

目录结构 ★

封装iHRM登录

登录接口 ★
普通方式实现
登录接口对象层 ★
登录接口测试用例层 ★
封装断言方法 ★

参数化 ★

回顾UnitTest参数化

原始案例
参数化实现
从json文件读取

登录接口参数化

组织数据文件
读取数据文件 ★
使用 parameterized 实现参数化 ★

员工管理接口

普通方法实现

接口对象层 ★

接口测试用例层 ★

数据库工具类封装

解决反复修改手机号

添加员工接口参数化

思维导图

作业

作业一:

  • 参照课堂代码,重新独立实现 登录接口 参数化 和 添加员工接口 参数化

答案:

python 复制代码

作业二:

参照《iHRM人力资源管理系统-API文档.pdf》接口文档,使用接口测试框架,完成部门增删改查。

  • 创建接口测试框架项目目录(7部分)
  • 分析接口文档
  • (建议先用 requests 普通方式实现)
  • 封装部门 增、删、改、查接口对象层
  • 编写脚本,调用封装的接口,实现部门的增删改查测试,每个接口编写一个测试用例即可。

答案:

python 复制代码

接口测试-第09天(代码优化、生成测试报告、日志收集、全量字段校验)

学习目标

能够借助测试套件生成测试报告

掌握如何使用logging实现日志收集

能够使用jsonschema库对响应数据进行全量字段校验

获取请求头

提取项目目录

生成测试报告 ★

日志收集

日志简介 ★

日志的级别

日志代码实现分析

日志使用 ★

可修改的位置
使用步骤:

全量字段校验 ★

简介和安装


JSON Schema⼊⻔

入门案例
校验方式
在线工具校验


python代码校验

JSON Schema语法

type关键字
properties关键字
required关键字
const关键字
pattern关键字

综合案例应用

思维导图

作业

作业一:

完善ihrm接口自动化测试框架,批量执行测试用例,生成16条以上用例测试结果的测试报告。截图提交。

作业二:

借助日志模板文件,初始化日志配置,要求:2天生成一个新日志文件,保留日志文件个数3。测试日志使用,打印日志信息内容: "这是晚自习作业题的日志信息",保存到 log_homework.log 文件中。打印 5条以上日志。截图打印结果。

作业三:

任选一个 json数据, 使用python代码实现该数据的 全量字段校验。要求:

  1. 字段数量 5个以上。
  2. 必须使用 type、properties、const、required 关键字。

截图代码,及校验截图。

相关推荐
测试杂货铺12 分钟前
UI自动化测试实战实例
自动化测试·软件测试·python·selenium·测试工具·测试用例·pytest
<e^πi+1=0>4 小时前
Postman常用测试脚本
测试工具·postman
互联网杂货铺5 小时前
单元测试/系统测试/集成测试知识总结
自动化测试·软件测试·测试工具·职场和发展·单元测试·测试用例·集成测试
梦境之冢7 小时前
axios 常见的content-type、responseType有哪些?
前端·javascript·http
DashVector7 小时前
如何通过HTTP API检索Doc
数据库·人工智能·http·阿里云·数据库开发·向量检索
哈利巴多先生7 小时前
HTTP,续~
网络·网络协议·http
白了个白i8 小时前
http的访问过程或者访问页面会发生什么
网络·网络协议·http
qq_372006868 小时前
浏览器http缓存问题
网络协议·http·缓存
测试者家园10 小时前
ChatGPT生成接口文档实践案例(二)
软件测试·chatgpt·llm·测试用例·测试图书·质量效能·用chatgpt做测试