• 多测师肖sir_高级金牌讲师__接口测试之练习题(6.1)


    常见的接口面试题目:

    1.postman接口测试,它有一个功能可以设置参数化,你有用过吗?
    用过
    (1)新建一个csv.文件 填写user、pwd
    新建一个全局变量 user、pwd
    点击body==form-data 填写user、pwd
    集合上点击run 导入csv.件
    查看结果
    (2){{}} 使用变量 ,在环境变量中添加值

    2.你测试过哪些接口?
    接口类型: http 接口 或https接口 webserver 接口
    项目中接口:口接口、提现接口、还款接口、审批接口、绑卡接口、逾期接口、用户过滤接口、 现回调接口等
    (2)电商项目接口:
    短信验证码校验接口、短信验证码下发接口、获取用户令牌接口、会员注册接口、修改会员密码接口、
    会员推荐列表查询接口、会员积分排名查询接口等
    (3)保险项目接口:
    投保确认接口、保单状态查询接口、保单注销接口、保单查询接口、保单打印接口、授权计划查询接口等
    通用接口:登录接口、搜索接口、增、删、改、查 接口
    (4)医疗接口

    海蓓医疗接口:医院接口,科类接口,科室接口,医生接口,排班接口,号源接口,预约挂号接口,登录注册接口,门诊接口,就诊人接口,充值接口,支付接口,退款接口,药房接口,住院接口,病历接口,体检接口等
    3有做过接口测试吗?接口测试你们是怎么测的
    做过
    首先是从开发那里拿到API接口文档,了解接口业务包括接口地址、请求方式,入参、出参,token鉴权,返回格式等信息。
    编写接口用例,
    然后使用Postman或Jmeter工具执行接口测试
    a、postman中步骤
    1)填写接口的请求放方式post、get
    2)填写接口的路径,
    3)填写接口的入参
    4)在test中进行断言
    5)然后在下发送
    6)查看响应结果
    7)在保存接口
    8)在根据接口用例测试异常场景

    b、一般使用Jmeter的步骤是这样的:
    1)新建一个线程组。
    2)然后就是新建一个HTTP请求默认值。(输入接口服务器IP和端口)
    3)再新建很多HTTP请求,一个请求一个用例。(输入接口路径,访问方式,参数等。)
    4)然后创建断言和查看结果树。
    最后调试并执行用例,最后编写接口测试报告。

    4.多接口怎么测(postman里面有一个批量处理)
    postman做接口集合测试注意细节有三点:
    1、我们要实现批量执行接口用例
    2、在批量执行接口用例时,我们需要在对应的用例加断言一般用tests[重命名]responsebody.has(内容)
    3、在执行完成后,我们只需关注断言失败的用例(要是密码改不了,需要删除cookie后再登录,再修改密码)
    执行,首先在collections中新建一个文件夹,把要测试的用例saveas到这个文件夹中,并重新命名,注意我们的格式和数据,及cookie值是否保存。
    完成之后,第二步就是来到runner运行,选择文件夹,环境选择、根据参数来选择执行次数。等待时间、参数范围、data数据类型本地本件、文件格式txt,勾是处理编码问题。
    最后看运行结果,只看body中的参数是否传入中却就可以了,因为有断言

    5.get和post请求的区别
    (1)post 请求参数在body中,get的请求参数在url上
    (2)post 请求相对于get的请求更快
    (3)post 请求相对于get的请求更加安全
    (4)post 请求入参格式多种(json、x-www-from-ucode),get的请求就是字符格式
    (5)post请求参数长度无限制,get请求采纳数长度有限制
    6.接口请求的基本结构
    请求头:url 、请求方式、请求协议、请求类型在这里插入图片描述
    请求体: 请求参数
    在这里插入图片描述

    响应头:返回类型、服务器

    在这里插入图片描述

    响应体
    在这里插入图片描述

    7.接口自动化测试怎么做的
    (1)postman 中用run 运行多条用例
    (2)python中unittest 框架做接口自动化
    (3)python中通过分层思想进行接口自动化

    8.业务中接口测试的业务请求是怎样的?
    一个具体的接口讲解:
    请求参数有哪些?
    返回参数有哪些?
    比如:登录接口:账号,密码 请求, 返回的是登录成功200,或密码错误300,账号错误400, 请输入账号密码500 ,账号为空600

    9.调用接口异常有哪些测试点?
     异常分为两类,参数异常和数据异常
      参数异常:
      关键字参数:将参数写为开发语言中的关键字
      参数为空:比如去掉了username参数
      多或少参数:多或者少参数的验证,现在还不确定如果一个接口多了参数如果没有报错是否是合理的,或者是否需要优化,因为就目前开发给予的答案拿是,一般不对接口多了参数的处理
      错误参数:比如将username参数写为了user等看是否能返回相应的error?code
      数据异常:
      关键字数据:将参数的值填为开发语言中的关键字
      数据为空:将参数的额值填为空
      长度不一致:因为数据库中每个字段都设置有字段长度,填写不符合的长度进行验证
      错误数据:就是将参数的值任意填写,或填写不存在的数值
      异常类型测试: 比如count参数,这个参数的类型一定是可以转换为int类型的,这时候我们需要测试如果传的一些不可以 转换为int类型值来测试代码是否加入判断
      在这里插入图片描述

    10.是怎么处理接口超时的?
    1.增加超时时间
    2.尝试多调用一次
    3.使用待处理队列
    4.回滚数据
    5.使用异步机制

    (2)如何设置接口超时 ?

    在这里插入图片描述
    在这里插入图片描述
    (1)、增加时间等待
    (2)、优化网络环境
    (3)、重试机制 (重跑机制)
    (4)、编写健壮的代码
    (5)、分析性能问题(响应时间多长,数据库慢查询等)

    11.一个完整的请求有哪几部分组成?
    请求头、请求体、响应头、响应体
    请求方式
    url:统一资源定位符,接口的访问地址(包含服务器地址+接口地址)
    请求体部
    Web表单传输格式
    键 值
    响应体
    响应内容
    12请求方式有哪些?
    其实HTTP协议是一个广泛应用的Internet协议,目前常用八种请求方式,分别是GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

    13请求正文的文本格式?
    from-data、w-www-form-urlencoded、xml、json、txt、html、bunary
    在这里插入图片描述
    在这里插入图片描述

    14.请求头包含哪些内容
    请求(客户端->服务端[request])
    Accept: /(客户端能接收的资源类型)
    Accept-Language: en-us(客户端接收的语言类型)
    Connection: Keep-Alive(维护客户端和服务端的连接关系)
    Host: localhost:8080(连接的目标主机和端口号)
    Referer: http://localhost/links.asp(告诉服务器我来自于哪里)
    User-Agent: Mozilla/4.0(客户端版本号的名字)
    Accept-Encoding: gzip, deflate(客户端能接收的压缩数据的类型)
    If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(缓存时间)
    Cookie(客户端暂存服务端的信息)
    Date: Tue, 11 Jul 2000 18:23:51 GMT(客户端请求服务端的时间)
    在这里插入图片描述

    15.响应头包含哪些内容
    响应(服务端->客户端[response])
    HTTP/1.1(响应采用的协议和版本号) 200(状态码) OK(描述信息)
    Location: http://www.baidu.com(服务端需要客户端访问的页面路径)
    Server:apache tomcat(服务端的Web服务端名)
    Content-Encoding: gzip(服务端能够发送压缩编码类型)
    Content-Length: 80(服务端发送的压缩数据的长度)
    Content-Language: zh-cn(服务端发送的语言类型)
    Content-Type: text/html; charset=GB2312(服务端发送的类型及采用的编码方式)
    Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(服务端对该资源最后修改的时间)
    Refresh: 1;url=http://www.it315.org(服务端要求客户端1秒钟后,刷新,然后访问指定的页面路径)
    Content-Disposition: attachment; filename=aaa.zip(服务端要求客户端以下载文件的方式打开该文件)
    Transfer-Encoding: chunked(分块传递数据到客户端)
    Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服务端发送到客户端的暂存数据)
    Expires: -1//3种(服务端禁止客户端缓存页面数据)
    Cache-Control: no-cache(服务端禁止客户端缓存页面数据)
    Pragma: no-cache(服务端禁止客户端缓存页面数据)
    Connection: close(1.0)/(1.1)Keep-Alive(维护客户端和服务端的连接关系)
    Date: Tue, 11 Jul 2000 18:23:51 GMT(服务端响应客户端的时间)
    在服务器响应客户端的时候,带上Access-Control-Allow-Origin头信息,解决跨域的一种方法。
    在这里插入图片描述

    16.常见的http响应状态码
    一些常见的状态码为:
    200: 成功
    301/302: 请求重定向到另外一个接口
    400: 请求语法错误
    403:资源没有访问权限
    404:资源不存在(有可能是请求url错误或参数不正确)
    405:请求方法不被允许(比如接口只允许Post,使用Get请求接口)
    500:服务器内部错误(通常是服务器挂了或接口Bug)
    502: 网关失效
    504: 网关请求超时

    17.postman参数化设置如何设置?

    全局变量
    全局变量是将这个变量设置成整个程序的都可以用,不用去区分环境设置。
    1.打开Postman,点击右上角的环境管理按钮
    2.选择Global,设置全局变量
    3.输入你要设置的变量名和变量,点击Save,进行保存
    4.引用全局变量,引用的方法为:{{变量名}}
    文档参数化,Postman支持Json文档,txt文档,CSV文档
    前提条件: 本文以txt文档为例,在txt里面创建测试数据,存入手机号和密码。多个数据之间用逗号分隔(逗号是英文的)
    1.先创建一个Collection集合
    2.将请求添加到集合里面
    3.设置请求参数的变量
    注意:变量名要和txt文档中的变量名一致
    4.设置Tests断言
    18.postman如何设置断言
    打开postman,点击tests,可设置断言,断言比如:状态码、响应时间、响应内容等

    19.postman如何设置全局变量和环境变量
    Postman右上角设置图标,选择Manage Environments
    点击add
    填写全局变量名及key value值
    在这里插入图片描述

    20.接口测试用例设计主要考虑哪些方面
    接口用例设计
    主要考虑接口的功能,业务,异常,性能,安全进行测试
    接口的功能
    测试接口的功能正确,确实符合接口文档中对接口的功能描述。

    接口的业务逻辑
    测试接口的业务依赖,某个接口执行需要依赖上一个接口成功请求的cookie
    接口的异常
    测试接口的入参参数名异常,参数数据异常。
    参数名异常:参数名称错误,参数多一个,参数少一个,参数为空。
    参数数据异常:数据类型错误,数据有效值错误,数据为空错误,数据长度错误
    入参值校验
    参数必填校验,参数长度校验,参数数据类型校验,参数数据有效值校验,参数
    是枚举值,要覆盖所有枚举值。参数数据默认值校验,参数与参数组合数据校验
    接口请求超时
    接口处理大量测试数据,数据库读写能力

    接口的性能
    测试接口并发数,响应时间,吞吐量,服务资源使用情况(cpu,内存)

    接口的安全
    测试接口的敏感信息加密
    请求时传输的参数数据加密
    cookie,session有效时间
    重要的信息存session,其他信息存cookie,有效时间设定。

    21.fiddler如何抓包
    1、选择勾选上https的解密选项。
    2、配置https的代理证书
    3、将fiddler重启就可以看到可以抓取到https的访问的链接了

    22.fiddler如何设断点,为什么设断点
    (1)断点:
    请求前断点:单个请求前断点,全局请求前断点
    请求后断点:单个请求后断点,全局请求后断点
    选择fiddler菜单中Rules->Automatic Breakpoints->Before Requests,设置断点,也可以使用快捷键F11;
    可以修改发送到服务器的数据包,但是修改前需要拦截,即设置断点。设置断点后,开始拦截接下来所有网页,直到取消断点。
    (2)拦截接口对数据进行篡改,请求参数 或响应参数

    23.fiddlers如何手机代理,抓app包
    这个设置需要电脑和手机处于同一个局域网下,一般可以使用同一个wifi。保证手机能够连通电脑。
    1、勾选上 “Allow remote computersto connect” ,允许远程设备连接。
    2、选择ipconfig获取电脑的Ipv4地址
    将 Fiddler 代理服务器的证书导到手机上才能抓这些 APP 的包。
    3、打开手机wifi,一直点击wifi处,出现修改wifi网络。
    4、打开显示高级选项,依次设置如下值
    (导入的过程:打开浏览器,在地址栏中输入代理服务器的 IP 和端口(即电脑的IP加fiddler的端口),会看到一个Fiddler 提供的页面,然后确定安装就好了)
    5、在重启一下fiddler就可以看到fiddler抓取手机app中发送包的内容了

    24.开发者工具F12如何查看接口请求
    1、打开谷歌浏览器,单击F12,打开开发者工具,选择network
    2、页面进行相关操作,可以看到network下有很多请求,如下图

    ===================================================
    python+request
    1、requests库做接口请求
    导入 requestes 库 import requests
    有三种方法:
    requests.post(url ,data,json)
    requests.rquests(post,url,data)
    requests.session(post,url,data) #保持会话

    2、requedxsts库中怎么把获取cookies
    (1)调用接口 对象,print(dx.cookies)
    (2) 提取cookie

    3、上个接口返回的token值如何作为下个接口的入
    (1)通过键值取
    (2)通过re正则提取

    4、token session和cookie的区别

    5、unittest框架中如何做自动化接口测试

    import  unittest
    import  requests
    from  jk.HTMLTestRunner3_New import HTMLTestRunner
    import  time
    
    class Cms_Api(unittest.TestCase):
        @classmethod
        def  setUpClass(cls) -> None:
            cls.s=requests.session()
        @classmethod
        def  tearDownClass(cls) -> None:
            pass
        def  setUp(self) -> None:
            pass
        def  tearDown(self) -> None:
            pass
        def test1_Log1(self):
            url="http://cms.duoceshi.cn/cms/manage/loginJump.do"
            data={'userAccount':"admin","loginPwd":"123456"}
            h='Content-Type:application/x-www-form-urlencoded'
            dx=self.s.post(url=url,data=data,json=h) #requestspost方法
            print(dx.json)
        def  test2_yhcx(self):
             url1 = "http://cms.duoceshi.cn/cms/manage/queryUserList.do"
             data1={'startCreateDate': '','endCreateDate': '','searchValue': ' ','page': '1'}
             h1 = 'Content-Type:application/x-www-form-urlencoded'
             dx1 = self.s.post(url=url1, data=data1, json=h1)  # requestspost方法
             print(dx1.json)
        def   test3api(self):
            print("自由接口")
    if __name__ == '__main__':
        # unittest.main()
          tj=unittest.TestSuite()
          # tj.addTest(Cms_Api("test1_Log1")) #运行一条用例
          # tj.addTests([Cms_Api("test1_Log1"),Cms_Api("test1_Log1")]) #运行多条接口用例 addtests
          # unittest.TextTestRunner().run(tj)
          # lj=r"C:\Users\Administrator\PycharmProjects\untitled39\jk" #第三种执行一个路径下的用例
          # d=unittest.TestLoader().discover(start_dir=lj,pattern="jk*")
          # unittest.TextTestRunner().run(d)
          lj=r"C:\Users\Administrator\PycharmProjects\untitled39\jk" #第四种生成报告
          d=unittest.TestLoader().discover(start_dir=lj,pattern="jkkj*")
          lj = r"C:\Users\Administrator\PycharmProjects\untitled39\jk"
          # print(d)
          new=time.strftime("%y-%m-%d-%H-%M-%S")
          file=lj+'/'+str(new)+ "_api.html"
          f=open(file,'wb')
          r=HTMLTestRunner(
              stream=f,title="api接口自动化测试报告",description='接口测试用例执行情况',tester='dcs'
          )
          r.run(d)
    
    • 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

    6、自己有没有设计过接口自动化框架,是怎么分层

    接口分层
    点击File =>new 一个 project
    然后点击project =》new 以下的python package
    cms_api :构建包=》组建并发送接口请求
    cms_config :配置包=》放所有接口的入参信息
    cms_report:报告包 =》放置运行所有测试用例生成的报告
    cms_run:运行包=》自动加载所有的测试用例、并且运行
    cms_testcase :用例包 =》继承unittest单元测试框架、组建接口测试用例
    cms_utils :工具包 =》工具类、发送邮件和生成报告模块
    1.写config,把参数值都写好,比如url、data和header,注意各个参数的数值类型,参数的具体值可以在浏览器中打开对应网页,按F12查看代码,在network里面查看参数
    2.在cms_pi包中组建接口和发送接口请求,导入request和config,参数名引用config里面的,创建一个全局的session对象、用来保持会话的状态和管理上下文,把各个接口的请求方式编写出来,同时用rep.json()来转换,全部封装在一个类里
    3.在testcase包中组建测试用例导入unittest模块、cms_api里面的Cms类,定义一个类,且继承unittest中的TestCase,用匿名对象来调用实例方法,然后进行断言,注意断言内容要与结果完全一致
    4.用run模块来运行所有的测试用例导入unittest、time,mail3, HTMLTestRunner,定义项目的路径
    定义用例的路径,定义测试报告的名称
    定义自动搜索用例,执行测试用例并生成报告,这里要注意时间戳。
    5.测试用例报告生成在report里面,用谷歌浏览器打开
    6.最后就是把报告发送到邮件里

  • 相关阅读:
    变分自编码器VAE
    scanf导致程序运行时出现stack smashing
    七、商城(中级)项目报错汇总
    Kanzi Shader入门
    【数据结构】顺序表的概念及实现
    Linux:mongodb数据库源码包安装(4.4.25版本)
    【GoWeb框架初探————XORM篇】
    Design Compiler工具学习笔记(6)
    c# 异步进阶———— paralel [二]
    时间复杂度(补充)和 空间复杂度
  • 原文地址:https://blog.csdn.net/m0_47403059/article/details/134049954