Python接口自动化浅析登录接口测试实战

news2024/11/23 12:59:57

以下主要介绍接口概念、接口用例设计及登录接口测试实战。

1、什么是接口?

接口:检测外部系统与系统之间以及内部各个子系统之间的交互点。

通俗来说,接口就是连接前后端的桥梁,接口测试可以简单理解为脱离了前端的功能测试。

一个又一个的接口就对应功能测试内一个又一个的功能。

但注意,一个功能有可能不是一个接口就能实现。

那么,接口测试和功能测试的区别在哪呢?

其实功能测试就是在页面上输入我们的参数值,点点点;

而接口测试没有前端,而是通过接口文档上的调用地址、请求参数等,校验返回的结果值,

也就是说,接口可以看成没有界面的功能测试。

因此,可以分析,系统间的接口包含三部分:输入、处理逻辑、输出。

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

2、如何开展接口测试?

接口测试流程如下:

1.需求评审,熟悉业务和需求;

2.开发提供API接口文档;

3.根据开发交付的接口文档,编写接口测试用例;

4.接口测试用例评审;

5.开始执行接口测试;

6.提交测试报告;

 

3、如何设计接口用例?

1.获取接口文档

一般公司的开发会提供接口文档,没有接口文档的自行抓包吧(摸摸头),不知道怎么抓包的小伙伴,可以看看之前的Fiddler系列文章。

Fiddler

接口文档是我们测试时最重要的一个依据,一个规范的接口文档至少包括:

1.接口说明;

2.调用URL;

3.请求方法(get、post等);

4.请求参数、参数类型、请求参数说明等;

5.返回参数说明;

如下为一个简单的登录接口文档:

2.分析接口文档的接口,提取测试点

接口测试用例跟常规的功能测试用例基本一样,

可以从接口功能测试、接口业务测试、接口性能测试、接口安全测试等角度考虑。

接口的逻辑校验,可以参照接口流程图来进行设计,一个分支需要作为一个场景去进行测试,需要覆盖到流程图里面所有的逻辑分支。

接口的参数校验,可以参照接口文档中的参数定义去进行验证,需要覆盖到所有参数对应的枚举值以及错误码等信息。

3.接口测试用例设计思路

接口功能的关注点是:

1.接口参数正确与否:接口传入的参数是否有正确填写;

2.接口参数缺失:接口参数有必填、选填参数,传参时,测试参数缺失对结果的影响;

3.接口参数边界值:比如用户名、密码有长度限制,需要测试不同长度的参数对结果的影响;

4.接口参数类型:比如接口文档中用户名为String类型,测试传入其他数据类型对结果的影响。

4.接口测试其他范围

接口业务测试

主要是从业务的角度出发,把接口组合成一条业务链,比如登录之后充值,在数据库中金额是否正确等等

接口的性能测试

是指接口是否满足业务的要求,比如业务要求系统可以满足50个人同时下单,那么下单这个接口就要可以承担50 TPS,目前业内一般使用JMETER去做接口性能测试,jmeter接口性能后续会单独在Jmeter系列文章里介绍。

接口安全测试

接口的安全性主要围绕Token、Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用。

注意:本文主要涉及接口功能测试,相信做过功能测试的童鞋,设计接口测试用例也是没问题的。

 

4、接口测试用例实战

以下,我们以登录接口进行实战。

随着代码模块越来越多,混在一起,杂乱无章,这时我们考虑架构分层了,上篇文章:Python接口自动化之requests请求封装,封装的requests请求类,每个用例都要调用,可以放在公共模块里。

在项目下新建一个文件夹common

放入请求模块requests_handler.py

requests_handler.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

import requests

class RequestsHandler:

    def __init__(self):

        """session管理器"""

        self.session = requests.session()

    def visit(self, method, url, params = None, data= None, json= None, headers= None):

        result = self.session.request(method,url,params=params,data=data,json=json,headers=headers)

        try:

            # 返回json结果

            return result.json()

        except Exception:

            return 'not json'

    def close_session(self):

        self.session.close()

编写登录接口用例,调用封装的请求类。

登录用例,新建一个test_cases文件夹,用来存放用例模块。

 

test_Login.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

import unittest

from common.requests_handler import RequestsHandler

class LoginTest(unittest.TestCase):

    def setUp(self):

        # 请求类实例化

        self.req = RequestsHandler()

    def tearDown(self):

        self.req.close_session()

    def test_login_success(self):

        login_url = 'http://127.0.0.1:8000/user/login'

        payload = {

            "mobile_phone": "1530272****",

            "pwd": "12345678"

        }

     

        res = self.req.visit('post',login_url,json=payload)

        self.assertEqual(0, res['code'])

if __name__ == '__main__':

    unittest.main()

运行结果为:

Ran 1 test in 0.213s
OK

对于用例的一些总结:
setUp, tearDown

前置条件,后置条件,setUp实例化,在运行测试用例前获取session管理器, tearDown,在测试用例执行结束后关闭session管理器。

对于断言

小伙伴们可能不知道到底用返回结果中的哪个字段断言。个人意见,如果code、msg比较详细的话,可以利用code、msg其中一个来断言,当然code、msg一起做断言也可以,甚至你觉得返回结果中某个数据符合你的预期,也是可以拿来断言,断言手段是灵活多变的,自行选择最优方案。

小伙伴们看到总结,退出微信,打开王者荣耀,一气呵成,其实还没完呢,我们写了正向用例,还有异常用例也写两条,更多的异常用例可以自行扩展下。

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

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

import unittest

from common.requests_handler import RequestsHandler

class LoginTest(unittest.TestCase):

    def setUp(self):

        # 请求类实例化

        self.req = RequestsHandler()

    def tearDown(self):

        # 关闭session

        self.req.close_session()

    def test_login_success(self):

        """

        正确手机号,正确密码

        """

        login_url = 'http://127.0.0.1:8000/user/login'

        payload = {

            "mobile_phone": "1530272****",

            "pwd": "12345678"

        }

  

        res = self.req.visit('post',login_url,json=payload)

        # 根据请求结果中的code进行断言

        self.assertEqual(0, res['code'])

    def test_phone_is_null(self):

        """

        手机号为空,密码正确

        """

        login_url = 'http://127.0.0.1:8000/user/login'

        payload = {

            "mobile_phone": "",

            "pwd": "12345678"

        }

        

        res = self.req.visit('post', login_url, json=payload)

        # 根据返回结果中的msg进行断言

        self.assertEqual("手机号码为空", res['msg'])

    def test_pwd_is_null(self):

        """

        正确用户名,密码为空

        """

        login_url = 'http://127.0.0.1:8000/user/login'

        payload = {

            "mobile_phone": "1530272****",

            "pwd": ""

        }

     

        res = self.req.visit('post', login_url, json=payload)

        # 根据返回结果中的msg进行断言

        self.assertEqual("密码为空", res['msg'])

if __name__ == '__main__':

    unittest.main()

测试结果为:

Ran 3 tests in 0.259s
OK

以上代码如下痛点:

  • 用例和数据未分离,维护成本大。可以数据与测试脚本分离,使用Excel存放测试用例,方便维护。
  • 仔细研究发现正向用例、异常用例,只是传入的数据不一样,其他都是通用
    这种情况下,我们可以引入ddt数据驱动,减少代码量。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1297494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java数据结构之《哈夫曼编码大全》(难度系数100)

一、前言: 这是怀化学院的:Java数据结构中的一道难度偏难(偏难理解)的一道编程题(此方法为博主自己研究与学习一名叫qing影的博主,问题基本解决,若有bug欢迎下方评论提出意见,我会第一时间改进代码,谢谢&am…

poe与chatgpt那个功能更强大

在当前的人工智能领域,Poe Al Chat以其卓越的聊天能力和实用的功能,受到了大家的广泛关注和喜爱。本文好为您个绍Poe Al Chat的功能,以及我们国内用户如何进行充值订阅。Poe Al Chat是一个基于OpenAl的GPT模型开发的人工智能聊天工具。它能够…

前端使用视频作为背景图的方法

实现思路 通过 video source 引入视频&#xff0c;并对视频播放属性进行设置&#xff0c;再通过 css 使视频覆盖背景即可。 代码 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>有开发问题可联系作者</title>…

MarsEdit 5 for Mac(博客编辑软件) - 博客创作的完美拍档!

您是一位热爱写作和分享的博主吗&#xff1f;如果是的话&#xff0c;那么MarsEdit 5 for Mac将成为您创作之旅中的完美拍档&#xff01;这款博客编辑软件为Mac用户提供了无与伦比的便捷和灵活性。 MarsEdit 5具有直观的界面和强大的功能&#xff0c;让您轻松管理和编辑多个博客…

酷开科技以创新为动力用大数据提升品牌认知

在21世纪的今天&#xff0c;我们生活在一个被互联网深深改变的世界。互联网不仅改变了我们的生活方式&#xff0c;也正在改变我们的思维方式和工作方式。而互联网作为一种新的发展趋势&#xff0c;更是为我们提供了无数的机会和无限可能性&#xff0c;从电子商务时代到社交网络…

基于Maven构建OSGI应用(Maven和OSGI结合)

基于Maven构建OSGI应用。 使用Maven来构建项目&#xff0c;包括项目的创建、子模块buldle的创建等。使用OSGI来实现动态模块化管理&#xff0c;实现模块的热插拔效果&#xff08;即插即用&#xff09;。 创建一个Maven项目&#xff1a;helloworld&#xff0c;并在该项目下创建…

[ROS2] --- service

1 service介绍 1.1 service概念 话题通信是基于订阅/发布机制的&#xff0c;无论有没有订阅者&#xff0c;发布者都会周期发布数据&#xff0c;这种模式适合持续数据的收发&#xff0c;比如传感器数据。机器人系统中还有另外一些配置性质的数据&#xff0c;并不需要周期处理&…

迅为3588开发板 sudo: 无法解析主机:/DNS配置

环境申明 RK3588 ubuntu 22.04 jammy 迅为开发板 hostname 看是否有Host .&#xff0c;如果没有&#xff0c; sudo vim /etc/hostname在里面加一行&#xff0c;我这就这一个 iTOP-RK3588hosts 修改本地hosts sudo vim /etc/hosts127.0.0.1 localhost localhost iTOP-RK3…

ai人工智能洗稿软件免费有哪些好用?【最新AI洗稿软件盘点】

在当今信息时代&#xff0c;内容创作已成为人们工作和生活中不可或缺的一部分。为了提高创作效率&#xff0c;越来越多的人转向人工智能洗稿软件。本文将专心分享一些优质的免费AI洗稿软件。 免费AI洗稿软件的崛起 免费AI洗稿软件的崛起为许多创作者带来了便利&#xff0c;使他…

贪心算法背包问题c

在背包问题中&#xff0c;贪心算法通常用来解决0-1背包问题&#xff0c;也就是每种物品都有固定数量&#xff0c;你可以选择拿或者不拿&#xff0c;但不可以拿走部分。以下是一个用C语言实现的贪心算法的例子&#xff1a; #include <stdio.h>#define MAX_N 1000#define …

卷王开启验证码后无法登陆问题解决

问题描述 使用 docker 部署&#xff0c;后台设置开启验证&#xff0c;重启服务器之后&#xff0c;docker重启&#xff0c;再次访问系统&#xff0c;验证码获取失败&#xff0c;导致无法进行验证&#xff0c;也就无法登陆系统。 如果不了解卷王的&#xff0c;可以去官网看下。…

从零开始搭建企业管理系统(三):集成 Spring Data Jpa

集成 Spring Data Jpa 什么是 Jpa什么是 Spring Data Jpa什么是 HibernateJPA、Spring Data Jpa、Hibernate 之间的关系集成 Spring Data JpaPOM 依赖配置文件UserEntity启动程序Jpa 配置Jpa 注解UserRepositoryUserServiceUserServiceImplUserControllerBaseEntity 什么是 Jpa…

.NET Core 依赖注入 Microsoft.Extensions.DependencyInjection

文章目录 前言什么是依赖注入C# 使用依赖注入框架介绍 Microsoft.Extensions.DependencyInjectionNuget安装简单单例使用打印结果 自动装配举例自动装配测试用例打印结果自动装配执行顺序测试用例有歧义构造函数渐进式构造函数循环依赖 自动装配结论 手动装配手动注入别名注入 …

ShardingSphere数据分片之分表操作

1、概述 Apache ShardingSphere 是一款分布式的数据库生态系统&#xff0c; 可以将任意数据库转换为分布式数据库&#xff0c;并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。 Apache ShardingSphere 设计哲学为 Database Plus&#xff0c;旨在构建异构数据库上…

L1-030:一帮一

题目描述 “一帮一学习小组”是中小学中常见的学习组织方式&#xff0c;老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作&#xff0c;即在得到全班学生的排名后&#xff0c;在当前尚未分组的学生中&#xff0c;将名次最…

使用Postman进行自动化集成测试

1 前言 笔者在使用Node开发HTTP接口的过程中&#xff0c;发现当接口数量越来越多&#xff0c;且接口之间互相依赖时&#xff0c;接口测试流程就会变得十分繁琐&#xff0c;且容易出错。那如何才能高效且全面地对接口进行测试呢&#xff1f; 通过实践&#xff0c;笔者发现可以…

程序员的职业连续性就那么重要吗?

大家好&#xff0c;我是风筝&#xff0c;微信搜「古时的风筝」&#xff0c;更多干货 年初的时候时候一个同学跟我聊天说起最近面试的经历。说投了不少简历&#xff0c;但是面试的机会不多&#xff0c;而且有的负责照片的 HR 直接跟他说&#xff1a;“你的工作连续性不达标&…

AI专题报告:AI多模态提升商业化价值,应用多点开花验证景气度

今天分享的AI系列深度研究报告&#xff1a;《AI专题报告&#xff1a;AI多模态提升商业化价值&#xff0c;应用多点开花验证景气度》。 &#xff08;报告出品方&#xff1a;太平洋证券&#xff09; 报告共计&#xff1a;21页 1 一周行情回顾 上周上证综指、深证成指、创业板指…

两个月软考-高项上岸

文章目录 前言结缘软考功亏一篑有始有终2个月计划资料部分计划截图 总结 前言 我们看小说或者电视剧电影都会看到这样的情节&#xff0c;主角一开始锦衣玉食&#xff0c;突然家道中落&#xff0c;啥都没了&#xff0c;主角再一路奋起重新找回了属于自己的一切&#xff1b;还有…