蟑螂恶霸的博客 蟑螂恶霸的博客
首页
  • Web自动化
  • 自动化测试框架
  • 接口自动化
  • 测试面试题
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Vue
  • JavaScript
  • Nginx
  • 自动化测试
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

蟑螂恶霸

一个爱折腾的程序员,什么都想试试!
首页
  • Web自动化
  • 自动化测试框架
  • 接口自动化
  • 测试面试题
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Vue
  • JavaScript
  • Nginx
  • 自动化测试
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • web自动化

  • 自动化测试框架

  • 接口自动化测试

    • Postman接口自动化测试集成Jenkins
    • python+Excel实现管理接口用例框架
    • python实战接口自动化头条项目
      • 前言
      • 接口自动化测试流程
      • 接口清单整理
      • 用例设计
        • 单接口
        • 多接口
      • 接口自动化项目框架
        • 目录
        • 数据驱动问题
        • 运行主入口
  • 测试面试题

  • Pytest

  • 自动化测试
  • 接口自动化测试
蟑螂恶霸
2022-06-07
目录

python实战接口自动化头条项目

# python实战接口自动化头条项目

源码地址:

https://github.com/xiaorui16888/TouTiao_Interface_Test

# 前言

这几天在巩固自己的知识,找到了一个黑马程序员的实战项目。对外开放了API接口文档(已失效),不过我费尽周折还是找到了新的接口,接口功能都是ok的。

我认为,做任何事情都要有一个流程。这样,做事情才会做到完美。当然接口自动化测试也有一套流程。

# 接口自动化测试流程

1.需求分析

- 请求(url,请求方法,参数)
- 响应(状态码,响应数据)

2.挑选需要做自动化的接口(计划时间,人员,接口复杂度)

​ 因为一个项目中,不一定所有的接口都需要做自动化测试;包括哪些人员适合、可以做接口自动化;包括接口之间的关联。

3.设计自动化测试用例(如果功能阶段设计过用例,可以直接拿过来使用即可)

4.搭建自动化测试环境

如:python--编写方便,上手快;

​ pycharm--ide强大,功能多。

5.设计自动化执行框架(报告、参数化、用例执行框架)

6.编写代码

7.执行测试用例框架(unittest、pytest)

​ 这两种框架,我一般做错误重跑、测试报告、执行顺序等用的是pytest,这个框架功能配套的插件很多(如:allure)。而且生成的测试报告比起HTMLTestRunner 也很美观。断言,一般用unittest,只需要类继承unittest.TestCase,就可以调用其中的断言函数。

8.生成测试报告(allure等)

# 接口清单整理

请求:

接口地址、请求方法、请求参数、请求头等

响应:

响应状态码、响应数据

# 用例设计

# 单接口

模板:

用例id、所属模块、接口名称、请求url、用例名称、请求方法、请求参数类型、请求参数、预期结果、实际结果、备注

注意:单接口颗粒度放的比较小(以测试数据为颗粒度)

image-20220607220030857

# 多接口

模板:

用例id、所属模块、接口名称、请求url、用例名称、请求方法、请求参数类型、请求参数、预期结果、实际结果、备注

注意:多个接口颗粒度为每个接口为基础,每个接口内所设计的数据可以通过参数化来解决。

image-20220607220150972

# 接口自动化项目框架

# 目录

1.接口对象层--api

2.用例执行业务层--case

3.数据驱动层--data

4.测试报告--report

5.工具层--封装公用的工具类

6.运行入口层--运行测试用例,生成测试报告

image-20220607224848532

# 数据驱动问题

这里我是用json去存储接口数据的。如下代码:

{
  "login_001": {
    "url": "http://toutiao.itheima.net/v1_0/authorizations",
    "mobile": "17612917750",
    "code": "246810",
    "except_code": "OK",
    "status_code": 201
  },
  "login_002": {
    "url": "http://toutiao.itheima.net/v1_0/authorizations",
    "mobile": "17612917750",
    "code": "123456",
    "except_code": "验证码不正确",
    "status_code": 400
  }
}
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

然后编写操作json工具类

import json

from config import base_path


class JsonUtil:

    def __init__(self, filename):
        self.filepath = base_path + '/data/{}'.format(filename)

    # 读取json
    def read_json(self):
        with open(self.filepath, 'r', encoding='utf-8') as f:
            # 调用load方法加载文件流
            return json.load(f)

    # 写入Json
    def write_json(self, case):
        with open(self.filepath, "w", encoding="utf-8")as f:
            json.dump(case, f, indent=4, ensure_ascii=False)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

使用参数化动态获取参数数据,ddt、unpack。

import unittest

from ddt import ddt, data, unpack

from api.api_login import ApiLogin
from tools.json_util import JsonUtil


def get_data():
    json_datas = JsonUtil('login_more.json').read_json()
    arrs = []
    for json_data in json_datas.values():
        arrs.append((json_data.get('url'), json_data.get('mobile'), json_data.get('code'), json_data.get('expect_code'),
                     json_data.get('status_code')))
    # print(arrs)
    return arrs


@unittest.skip("跳过")
@ddt
class TestLoginMore(unittest.TestCase):

    @data(*get_data())
    @unpack
    def test_login_more(self, url, mobile, code, expect_code, status_code):
        # 调用登录方法
        resp = ApiLogin().api_post_login(url, mobile, code)
        print('查看响应结果:', resp.json())
        #
        # 断言响应信息及状态码
        self.assertEqual(expect_code, resp.json()['message'])
        self.assertEqual(status_code, resp.status_code)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 运行主入口

import os

import pytest

if __name__ == '__main__':
    # 运行测试套件
    pytest.main()
    # 生成临时报告数据,并清理之前生成的
    os.system('allure generate ./temps -o ./report --clean')
1
2
3
4
5
6
7
8
9
[pytest]
addopts =  -vs --alluredir ./temps --clean-alluredir
testpaths = ./case
python_files = test*
python_classes = Test*
python_functions = test*
1
2
3
4
5
6
上次更新: 2022/10/15, 15:19:25
python+Excel实现管理接口用例框架
某培训机构面试题

← python+Excel实现管理接口用例框架 某培训机构面试题→

最近更新
01
实现定时任务数据库配置
06-09
02
SQL Server连接
02-22
03
RSA加密工具类
02-22
更多文章>
Theme by Vdoing | Copyright © 2022-2023 蟑螂恶霸 | Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式