0
点赞
收藏
分享

微信扫一扫

国庆10.4

一世独秀 2023-10-05 阅读 47
python

一。基本概念

接口概念:系统与系统之间 数据交互的通道。

接⼝测试概念:校验 预期结果 与 实际结果 是否⼀致。

特征:

        测试⻚⾯测试发现不了的问题。(因为:接⼝测试 绕过前端界⾯。

        符合质量控制前移理念。

        低成本,⾼收益。

实现⽅式

        ⼯具实现: Postman :使⽤简单。功能较少。

                           Jmeter:功能完善,上⼿难度⼤。

        代码实现: python + requests + pytest     

                           java + HttpClient

二。HTTP协议

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

HTTP 协议简介

        HTTP概念: 超⽂本传输协议。基于客户端和服务器的应⽤层协议。

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

URL

定义:URL(uniform Resource Locator) 统一资源定位符,网络资源地址

HTTP使用URL来来建立连接和传送数据

URL组成:协议://hostname[:port]/path/[?查询参数1&查询参数2]

格式:协议 :// 域名 : 端⼝号 / 资源路径?查询参数 1& 查询参数 2...

协议:指定数据传输的规则 :http 和 https

域名:在⽹络环境中,定位⼀台主机。 本质:IP 地址

端⼝号:在⽹络主机上,定位⼀个进程(应⽤程序)。 可以省略,端⼝号跟随协议。

        http: 80

        https: 443

资源路径:指定要访问的 数据资源。 可以没有。如果没有,默认 值为 “/”

查询参数:给数据资源传递的参数 。可以有多个,

⽤ & 隔分 每⼀组查询参数,采⽤ k=v 键值对格式

下面URL的各个组成部分

http://www.weather.com.cn/data/sk/101010100.html

协议:http

域名:www.weather.com.cn

端口:80

资源路径:/data/sk/101010100.html

查询参数:无

三。HTTP请求

产⽣端: ⼀定产⽣于 客户端。

数据格式:请求行,请求头,请求体

整体格式

        请求⾏(http 请求第⼀⾏)

        请求头(第⼆⾏开始,到空⾏之前)

        空⾏(代表请求头结束)

        请求体(空⾏之后,直到结束)

请求⾏ 组成:请求⽅法(空格)URL (空格)协议版本

请求⽅法:

        get:查询 —— 没有请求体

        post:添加(登录、注册)

        put:修改

        delete:删除 —— 没有请求体

URL :语法格式⻅上。

协议版本:默认常⽤ HTTP/1.1

请求头

内部所有数据,均采⽤ k:v 语法格式 .

Content-Type:请求体数据类型

 text/html: HTML格式

 text/plain:纯文本格式

 image/jpeg:jpg图片格式

 application/json: JSON数据格式

 application/x-www-form-urlencoded: 表单默认的提交数据格式

 multipart/form-data: 在表单中进行文件上传时使用

请求体

        get、 delete 请求,没有请求体

        post、 put 请求,有请求体

        请求体中的数据类型,受 请求头中 Content-Type 的 值影响。

        位置:空白行之后的内容

        作用:传输数据实体

        请求体常在POST、PUT方法中使用

        常配合的请求头:Content-Type和Content-Length

四。HTTP响应

产⽣端:

⼀定是在服务器接受到 http 请求后,回发响应数据。

整体格式

响应⾏(第⼀⾏)

响应头(第⼆⾏开始,到空⾏结束)

空⾏(表示响应头结束)

响应体(空⾏,直到结束)

响应行也叫状态行

        位置:响应数据中第一行

        作用:描述服务器处理结果

        内容:状态行由协议版本号、 状态码 、状态消息组成

状态码三位数字组成,第一个数字定义响应类别:

1xx:指示信息

2xx:成功

3xx:重定向

4xx:客户端错误

5xx:服务器端错误

响应头

位置:第二行开始到空白行之间

作用:描述客户端要使用的一些附加信息

特点:响应头由键值对组成,每行一对

响应体

位置:响应数据空白行之后

作用:服务器返回的数据实体

特点:有图片、json、xml、html等多种类型

四。接口规范

传统接口特性:

        请求⽅法,统⼀使⽤ get post

        针对⼀个资源的操作,URL 不唯⼀

        响应状态码统⼀使⽤ 200 表示

RESTful ⻛格接⼝

        特性:请求⽅法,与 http 协议对应。

                get —— 查询

                post —— 添加

                put —— 修改

                delete —— 删除

针对⼀个资源的操作, URL 唯⼀。 只看 URL ⽆法确定具体操作。

状态码使⽤较灵活

五。接口测试流程

1. 需求分析(产品经理产出的需求⽂档)

2. 接⼝⽂档解析(由开发产出接⼝⽂档)

3. 编写接⼝测试⽤例(将⽤例⽤ Excel形式表现)

4. 编写接⼝测试脚本

⼯具(postman)⽣成脚本

代码(python)编写,⽣成脚本

5. 执⾏脚本,跟踪缺陷

6. ⽣成接⼝测试报告

7. (可选)接⼝⾃动化持续集成

六。接口文档解析

接口文档 :又称为API文档,是由后端开发编写,用来描述接口信息的文档。

为什么要写接口文档 ? 协同:团队人员工作协同配合 。约束:项目更新修改同步维护

接口解析要关注的核心要素?

1.请求报文:请求方法/请求路径/请求数据

2.响应报文:响应状态码/响应数据

接口文档的内容:

基本信息 : 接口名称、接口描述

请求参数 :1. 请求方法 2. 请求路径3.请求头 4.请求数据:字段、说明、类型、备注、是否必填  

返回参数 :1. 响应状态码 2.响应数据:字段、说明、类型、备注、是否必填 3.data结构类型

七。Requests库

八。cookies和session

Cookie简介

  • cookie 是工程师,针对 http协议 是无状态这一特征,设计的一种技术。

  • cookie 将数据保存在浏览器端。默认存储空间大小为 4k(可以修改)。

  • cookie 中的数据,用户和随意获取,没有安全性可言。

  • cookie 中存放的数据类型,受浏览器限制。

  • cookie 中大多存放于网络通信相关的不敏感数据信息。提高访问速度。如:用户名、登录状态等。

Session简介

概念:也叫 会话!从客户端登录服务器开始,直到客户端退出登录,所产生的所有通信数据,保存在 session中。

  • session 将数据存在服务器端

  • session 使用服务器存储空间,没有大小限制。

  • session 支持的数据类型,受服务器主机影响。几乎支持所有数据类型。

  • session 中的数据,大都采用 加密、转码存储。安全性较高。

Session自动管理Cookie

因为,cookie中的数据,都是由 session 提供的。

面试题 Cookie 和 Session 区别

  1. 数据存储位置:

    • Cookie 存储在 浏览器端

    • Session 存储在 服务器端

  2. 安全性:

    • Cookie 直接存储在浏览器,可以任意获取,没有安全性可言。

    • Session 存储在 服务器端,采用 加密、转码形式存储数据,安全性较高。

  3. 数据类型

    • Cookie 直接存储在浏览器,支持测试数据类型受浏览器限制

    • Session 存储在 服务器端,服务器就是一台主机。因此几乎支持所有的数据类型。

  4. 大小:

    • Cookie 默认大小 4k(可调)

    • Session 直接使用服务器存储。没有大小限制。

九。PyMySQL操作数据库

十。日志收集

日志

日志就是用于记录系统运行时的信息,对一个事件的记录;也称为 Log

有哪些信息需要记录?

脚本运行过程中某个重要变量的值

方法的输入参数和返回结果

异常信息

日志作用:

1.调试程序

2.了解系统程序运行的情况,是否正常

3.系统程序运行故障分析与问题定位

4.用来做用户行为分析和数据统计

日志级别

日志级别:是指日志信息的优先级、重要性或者严重程度

当为程序指定一个日志级别后,程序会记录所有日志级别 大于或等于 指定日志级别的日志信息,而不是仅仅记录指定级别的日志信息;

一般建议只使用DEBUG、INFO、WARNING、ERROR这四个级别

日志收集的位置:

控制台 :方便自动化测试脚本的调试

日志文件:可以把日志长久的保存起来

需要达成的效果:

1. 可以把日志输出到不同位置

        控制台

        日志文件(防止日志文件过大,每日生成一个日志文件)

2. 记录更加详细的日志信息

        打印日志的时间

        日志的级别

        打印日志的位置

        日志内容

3. 可以打印不同级别的日志如  INFO ERROR

十一。代码分层

  • 分层思想:

    • 按代码功能,划分为 接口对象层、测试脚本层

  • 接口对象层:

    • 负责 发送 http请求,访问待测接口。返回响应数据。

  • 测试用例层(测试脚本层):

    • 调用 接口,按响应数据,断言完成测试。

封装思想:

  • 将 普通方式实现代码中,固定不变的,直接写到方法的实现内部。

  • 将动态变化的,从参数传入。

  • 将响应结果,通过返回值 return

十二。Unittest框架

unittest是Python标准库中的一个单元测试框架,用于编写和执行单元测试。它提供了一组用于编写测试用例、运行测试以及生成测试报告的类和方法。

下面是unittest框架的一些重要概念和使用方法:

  1. 测试用例(Test Case):测试用例是单元测试的最小单位,它是一个独立的测试单元,用于验证代码的某个具体功能或行为。通常继承自unittest.TestCase类,并包含一个或多个测试方法。

  2. 测试方法(Test Method):测试方法是测试用例中的一个函数,以test_开头,用于执行具体的测试逻辑。可以在测试方法中使用断言(assert)来验证预期结果和实际结果是否一致。

  3. 测试套件(Test Suite):测试套件是由多个测试用例组成的集合,用于按照一定顺序运行多个测试。

  4. 测试运行器(Test Runner):测试运行器是用于执行测试的工具,可以运行单个测试用例、单个测试模块或整个测试套件,并生成测试报告。

  5. 断言方法(Assertion Methods):断言方法是用于验证测试结果的方法,可以判断实际结果与预期结果是否相等、是否为真等。例如,assertEqual()用于判断两个值是否相等。

 十三。参数化

# 将测试数据 组织到 json文件中
[
  {"x": 10, "y": 20, "expect": 30},
  {"x": 100, "y": 200, "expect": 300},
  {"x": 1000, "y": 2000, "expect": 3000}
]
--------------------------------------------------------------
import pytest
import json

# 待测 函数
def add(x, y):
    return x + y

# 封装函数,读取json文件,将 [{},{},{}] 数据 转换为 [(),(),()] 格式的数据
def read_json_data(filename):
    with open(filename, "r", encoding="utf8") as f:
        json_data = json.load(f)
        data_list = []
        for data in json_data:
            val = data.values()
            tmp = tuple(val)
            data_list.append(tmp)
        # 必须返回,不能在 for 内
        return data_list  # 返回 [(10, 20, 30), (100, 200, 300), (1000, 2000, 3000)]

# 结合 pytest 定义测试类
class TestAddFunc(object):
    @pytest.mark.parametrize("x, y, expect", read_json_data("add_data.json"))  # 参2 要求必须是 [(),(),()] 格式的数据
    def test_add(self, x, y, expect):  # 通用测试方法
        res = add(x, y)  # 调用 待测函数,得实际结果
        assert expect == res  # 断言

十四。接口自动化测试框架

1.在data/下组织数据文件

2.

  1. 在 common/ 下创建 文件 read_json_file.py

  2. 在 文件内,创建 函数,读取json文件中的数据,转换成 [(),(),()] 格式数据

  3. 测试此函数功能通过

  4. 建议读取 json文件时,使用 绝对路径法传入文件名

  5. 在 config.py 中,添加 全局变量,获取 项目目录 BASE_DIR = os.path.dirname(__file__)

  6. 拼接 json文件的绝对路径 filename = BASE_DIR+"/data/login_data.json"

  7. 使用 绝对路径,传入 json文件读取函数。 read_json_data(filename)

import json

# 定义工具函数,读取json文件中的数据,转换成 [(),(),()] 格式数据
def read_json_data(filename):
    with open(filename, "r", encoding="utf8") as f:
        json_data = json.load(f)
        login_list = []
        for data in json_data:
            tmp = tuple(data.values())
            login_list.append(tmp)

        return login_list

if __name__ == '__main__':
    res = read_json_data("../data/login_data.json")
    print(res)

3.在common下写断言工具和数据库操作类

4.在api下写登录工具和员工管理工具

5.解决重复手机号问题,

  • 在 测试 添加员工接口前(setup),保证 数据库中,无此手机号!执行 delete SQL语句,将欲使用的手机号删除。

  • 使用 这个手机号,展开 添加员工接口的 测试。

  • 在 测试 添加员工接口结束后(teardown),删除 添加员工接口测试时,使用的手机号。

    def setup(self):
        del_sql = f"delete from bs_user where mobile='{TEL}';"
        DBTools.db_uid(del_sql)

    def teardown(self):
        del_sql = f"delete from bs_user where mobile='{TEL}';"
        DBTools.db_uid(del_sql)

6.获取请求头

  1. 在 common/ 下创建文件 get_header.py

  2. 文件中添加 代码,获取请求头,并测试无误

from api.ihrm_login_api import IhrmLoginApi

def get_header():
    req_data = {"mobile": "13800000002", "password": "123456"}
    resp = IhrmLoginApi.login(req_data)
    header = {"Authorization": resp.json().get("data")}
    return header

if __name__ == '__main__':
    ret = get_header()
    print(ret)

7.生成测试报告,储存在report目录下

十五。全量字段校验

十六。Dubbo

举报

相关推荐

0 条评论