面试问题python-接口自动化

1.能够大致讲一下你们接口自动化框架是怎么搭建的吗?

好的,我们采用unittest和ddt数据驱动思想搭建测试框架,(对数据excel读取、yaml配置、Requests接口请求、Re参数化、Pymysql数据库效验、日志等模块实现封装),其中,用

1.Openpyxl来处理excel,存储测试数据(用例数据)

2.pyyaml来配置文件(configparse,pyyaml)

  1. Pymysql来连接mysql数据库,执行sql数据,进行数据效验

4.Requests请求库,来向接口发起请求

5.使用logging模块来创建日志器,记录项目中的日志信息

6.使用HttpTestRunner来生成HTML测试报告

7.使用re模块来实现参数化(正则匹配)

8.使用动态创建属性(类属性)的机制来实现接口之间的依赖 (setattr getattr)

比如:我们项目中客服指派订单的时候,需要上一个接口订单ID,首先要对上一个接口发送请求,获取订单id,通过实例化对象,创建属性名,获取属性值,从而实现指派订单接口的成功请求。

分层设计

为了提升接口自动化测试框架的拓展性、稳定性、完整性,进而提升测试效率,往往会将测试框架工程化,

整个流程会分为不同的层级,每个层级之间保持相对独立

cases

测试执行逻辑层,用于存放所有的测试用例类

configs

配置层,用于存放当前框架中的所有配置信息(使用不频繁,修改不频繁的数据)

datas

测试数据层,用于存放所有的测试数据,测试参数(可以使用excel,json,yaml,数据库来存储)

libs

自定义库文件层,用于存放自定义或者二次开发的库文件

logs

日志层,用于保存运行框架过程中产生的所有有效日志信息

reports

报告层,用于保存所有的测试报告文件(一般为html报告)

scripts

脚本封装层,用于保存所有的操作封装模块(yaml,excel,log.mysql,requests,参数化等)

run.py

用例启动文件,使用套件加载用例,批量执行并生成报告

2.你做接口自动化测试时,测试数据放哪里?

  1. 对于一些基础配置比如环境地址、手机号码、一些不怎么变的数据配置可以放到conf文件
  2. 接口测试需要用到的数据可以放数据库表,也可以放到excel中,一般excle中放的是单口测试用例
    3)

3.如何设置高质量的测试框架

在这里插入图片描述

4.什么是数据驱动?

数据驱动就是通过excel,yaml或者xml,数据库等数据结构来维护测试数据,通过相应的技术去处理,拿到测试数据用于测试,从而实现测试数据与代码的解耦,数据驱动测试的本质是高级的参数化。常用的ddt数据驱动

5.excel中如何设计你的用例?

1 一个模块对应一个Excel表
2 一条接口对应一张sheet表
3 表中一行对应一条测试用例
4 在开始要注明测试时需要的sql
5.多参数传递可以用json解决
在这里插入图片描述

6.excel中的数据怎么拿出来?

通过第三方库openpyxl来完成,项目只需要引入openpyxl库,通过它提供的api即可完成对于excel的操作,甚至于我们自己也可以做一些二次封装,使得操作更方便。一行数据就是一个用例。
一.Excel中的三大对象
WorkBook:工作簿对象
Sheet:表单对象
Cell:表格对象
二、openpyxl对Excel的操作
创建一个工作薄:wb = openpyxl.Workbook()
新增一个sheet表单:wb.create_sheet(‘test_case’)
保存case.xlsx文件:wb.save(‘cases.xlsx’)
打开工作簿:wb = openpyxl.load_workbook(‘cases.xlsx’)
选取表单:sh = wb[‘Sheet1’
读取第一行、第一列的数据:ce = sh.cell(row = 1,column = 1)
按行读取数据:row_data = list(sh.rows)
关闭工作薄:wb.close()
按列读取数据:columns_data = list(sh.columns)

https://www.cnblogs.com/wanglle/p/11455758.html

7.exce如果有些接口做了鉴权(需要鉴定权限),怎么实现这些接口的自动化测试?

首先需要明确接口是通过什么机制来实现的鉴权

  1. 如果是通过会话id(JSESSIONID)来实现鉴权的,那么先调用完登录接口–》拿到它返回的这个数据–》存储起来–》后面再调用其他接口的时候直接带上这个数据过去就可以了。
  2. 如果是通过token来实现鉴权的,那么同样只需要在调用完登录接口–》拿到它返回的这个数据–》存储起来,后面再调用其他接口的时候直接带上这个数据过去就可以了。
    先回答上面的一个基本实现步骤,然后再补充以下一些实现细节:
    a. 怎么取到这个JSESSIONID或者token
    这个信息怎么取首先得明白它是怎么返回来的,可能为以下两种方式:
  3. 登录接口的响应头
  4. 登录接口的响应报文
    需要找开发确认,不同方式不同取法。
    b. 怎么存储这个JSESSIONID或者token
  5. 文件中(excel、properties文件都可以)
  6. 数据库
  7. 代码里面自己定义的公共静态变量,作为一个共享的数据
    c. 请求其他需要鉴权的接口时,怎么带过去这个数据
    先找开发人员确认,再调用需要鉴权的这些接口怎么携带这个鉴权的信息(票)。一般不外乎这么几种:
  8. 拼接在url上传过去用于服务器验证
  9. 设置到请求体中
  10. 通过请求头带过去

8.某个接口请求,参数依赖上个接口的返回数据,怎么处理(接口关联)?

场景:b接口在调用的时候参数依赖于a接口的返回数据。
处理方案:
a接口调用完–》从响应中取出b依赖的这个参数–》保存起来–》b调用的时候,取出这个信息–》当做参数传过去即可。
保存方案:
参考问题5中的数据保存方式

9.接口测试的垃圾数据如何清理?

可以自己准备单独的环境(独立的数据库),这样接口调用产生的数据可以在整个套件执行完后(@AfterSuite)通过执行sql脚本来完成数据删除。

10.你做接口自动化,项目用的是什么数据库,用什么来操作的这个数据库

Mysql,可以通过jdbc来实现数据库的增删查改等操作。
https://blog.csdn.net/kongsuhongbaby/article/details/84948205

11.你做接口自动化时怎么做的数据验证

数据验证主要包括两个方面:

  1. 接口响应报文的验证
    利用jsonpath取出响应数据(大多数情况是json)中的关键字段的值,通过Assert断言这些关键字段的值是否符合预期。预期值和jsonpath取值表达式可以配置在excel中。

  2. 数据库表数据的验证
    做表数据验证要先明白两点:
    a. 表数据验证首先得明白这个接口的基本业务,会影响到哪些表,哪些字段的数据,然后才能准备查询sql去有针对性的查数据。
    b. 并不是所有用例的执行都会操作数据库,影响到表数据,因此只有影响到了表数据的用例,才准备查询脚本。
    具体做法:
    Excel用例准备aa,bb,cc三列,aa传脚本,bb,cc两列分别用来回写用例执行前的sql查询结果和用例执行后的sql查询结果,两个数据对比即可知道数据变化是否满足预期。

12.你做如何提升测试套件的执行效率

1.减少excel读写,减少不必要的io操作
2.excel数据读取测试数据,全部存储到静态变量中)。
3.excel数据回写,尽量通过批量方式去写。

13.你用过单元测试框架吗,是什么框架,有哪些常用操作?

用过,unittest,pytest,这些测试框架都支持我们去定义测试套件,达到管理我们测试用例代码的作用,同时这些测试框架提供的一些丰富注解不仅能很方便的控制测试用例的执行顺序来控制整个测试流程,还能为各种测试场景的实现提供支撑。
常用操作:
seutp,teardown,适合单个测试用例的初始化、环境清理。
seutpClass,teardownClass:适合测试类的全局初始化、环境清理。
assertXXXX: 各种断言方式
testLoader的discover: 用来发现测试用例
testSuite的addTests: 用来装载测试用例
@ddt 数据驱动
htmlTestRunner:用来生成html测试报告

14.unittest,pytest的区别

https://www.cnblogs.com/liudinglong/p/12846986.html
https://www.cnblogs.com/hp1991/p/11238559.html

一、用例编写规则
pytest可以执行unittest风格的测试用例,无须修改unittest用例的任何代码,有较好的兼容性。 pytest插件丰富,比如flask插件,可用于用例出错重跑;还有xdist插件,可用于设备并行执行。

二、用例前置和后置
1.unittest提供了setUp/tearDown,每个用例运行前、结束后运行一次。setUpClass和tearDownClass,用例执行前、结束后,只运行一次。
2.pytest提供了模块级、函数级、类级、方法级的setup/teardown,比unittest的setUp/tearDown更灵活。
pytest还可以在函数前加@pytest.fixture()装饰器,在测试用例中装在fixture函数。fixture的使用范围可以是function,module,class,session。

firture相对于setup和teardown来说有以下几点优势:
命名方式灵活,不局限于setup和teardown这几个命名
conftest.py 配置里可以实现数据共享,不需要import就能自动找到一些配置,可供多个py文件调用。
scope=“module” 可以实现多个.py跨文件共享前置
scope=“session” 以实现多个.py跨文件使用一个session来完成多个用例
用yield来唤醒teardown的执行

三、断言
1.unittest提供了assertEqual、assertIn、assertTrue、assertFalse。
 2.pytest直接使用assert 表达式。

四、报告
1.unittest使用HTMLTestRunnerNew库。
  2.pytest有pytest-HTML、allure插件。

五、失败重跑
  1、unittest无此功能。
  2、pytest支持用例执行失败重跑,pytest-rerunfailures插件。

六、参数化
  1、unittest需依赖ddt库,
  2、pytest直接使用@pytest.mark.parametrize装饰器。

结合实例说一下自动化怎么做的

比如说平台端上架课程的接口自动化实现吧,首先需要登陆,使用requests的post请求登录获取登陆接口的token,将token带入到课程上架的接口中,根据写好的用例将用例代码化实现

15.params和data区别

由于get请求无请求体,post请求有请求体

使用params参数时,默认会把参数附加到url后面,所以发送get请求时应使用params参数

使用data参数时,参数会存放到请求体中,所以发送post请求时不能使用params,应使用data,除非接口及支持get又支持post,同样get请求也不能使用data参数

  • 9
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在进行Python接口自动化测试面试时,以下是一些常见问题和参考答案: 1. 你如何启动接口自动化测试?你如何加载用例并执行批量测试并生成报告? 答:可以使用一个测试框架(例如pytest)来管理和执行接口自动化测试。通过编写测试用例文件,并使用测试套件加载和执行这些用例。执行完成后,可以生成测试报告来展示测试结果。 2. 在接口自动化测试中,测试数据应该放在哪里? 答:对于一些基础配置(如环境地址、手机号码、不经常变化的数据),可以将其放在配置文件中。而接口测试用到的数据可以放在数据库表中,也可以放在Excel文件中,通常Excel文件中存放的是单接口测试用例。 3. 如何设置一个高质量的测试框架? 答:要设置一个高质量的测试框架,可以考虑以下几点: - 使用合适的测试框架和工具,如pytest或unittest,以便管理和执行测试用例。 - 编写可重用的测试代码和测试工具,并使用模块化的方式组织测试用例和测试步骤。 - 设计良好的测试用例,包括边界值测试、异常情况测试等,覆盖各种测试场景。 - 使用适当的断言和日志记录,以便在测试失败时快速定位问题。 - 定期维护和更新测试框架,以适应项目需求和新的测试技术。 4. 如果在接口自动化中使用了数据库,你会使用哪个数据库,并如何操作该数据库? 答:在接口自动化中使用的数据库可以根据项目需求而定。常见的数据库有MySQL、SQLite、PostgreSQL等。对于数据库操作,可以使用Python的数据库驱动程序(如MySQLdb、psycopg2)来连接和执行SQL语句,以完成对数据库的操作。 5. 如果某些接口需要鉴权(需要验证权限),如何实现这些接口的自动化测试? 答:对于需要鉴权的接口,在自动化测试中可以通过以下方式实现: - 在测试框架中预先设置鉴权信息,例如在配置文件中配置访问令牌或用户名密码等,并在发送请求时自动带上这些鉴权信息。 - 使用模拟登录或生成访问令牌的方法,在测试开始前获取鉴权信息,并在测试中使用该信息进行接口访问。 这些问题和答案仅供参考,你可以根据自己的经验和项目需求来适应和补充。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [面试问题python-接口自动化](https://blog.csdn.net/qq_38224014/article/details/123719060)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值