接口自动化测试面试题(3)

一、json和字典dict的区别

首先python里面的基础数据类型有:int、str、 float、list、bool、tuple、dict、set这几种类型,里面没json这种数据类型。

JSON( 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

由于你的代码是python写的(也有可能是php,java,c,ruby等语言),但是后端接口是java写的(也有可能是其它语言),不同的语言数据类型是不一样的(就好比中国的语言和美国的语言数据类型也不一样,中国的一般说一只羊,一头牛,美国都是 a /an这种单位),所以就导致你提交的数据,别的开发语言无法识别,这就需要规范传输的数据(传输的数据都是一个字符串),大家都遵循一个规范,按一个标准的格式去传输,于是就有就json这种国际化规范的数据类型。

json本质上还是字符串,只是按key:value这种键值对的格式来的字符串b = '{"a": 1, "b": 2, "c": true}'

二、测试的数据放在哪?
1.对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,写的配置文件里(如ini)
2.对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成
3.对于一个接口有多组测试的参数,可以参数化,数据放yaml,text,json,excel都可以
4.对于可以反复使用的数据,比如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,用完后再清理
5.对于邮箱配置的一些参数,可以用ini配置文件
6.对于全部是独立的接口项目,可以用数据驱动方式,用excel/csv管理测试的接口数据
7.对于少量的静态数据,比如一个接口的测试数据,也就2-3组,可以写到py脚本的开头,十年八年都不会变更的
 
三、什么是数据驱动,如何参数化?
 
 
 
四、下个接口请求参数依赖上个接口的返回数据
这个很容易,不同的接口封装成不同的函数或方法,需要的数据return出来,用一个中间变量a去接受,后面的接口传a就可以了
可以参考登录的cookie或token
五、依赖于登录的接口如何处理
参考requests的方法
 
六、依赖第三方的接口如何处理
这个需要自己去搭建一个mock服务,模拟接口返回数据
mock服务搭建需要自己能够熟练掌握,面试会问你具体如何搭建 ,如何模拟返回的数据,是用的什么格式,如何请求的

七、不可逆的操作,如何处理,比如删除一个订单这种接口如何测试

此题考的是造数据的能力,接口的请求数据,很多都是需要依赖前面一个状态的
比如工作流这种,流向不同的人状态不一样,操作权限不一样,测试的时候,每种状态都要测到,就需要自己会造数据了。
平常手工测试造数据,直接在数据库改字段状态。那么自动化也是一样,造数据可以用python连数据库了,做增删改查的操作
测试用例前置操作,setUp做数据准备
后置操作,tearDown做数据清理

八.接口产生的垃圾数据如何清理

跟上面一样,造数据和数据清理,需用python连数据库了,做增删改查的操作
测试用例前置操作,setUp做数据准备
后置操作,tearDown做数据清理

九.一个订单的几种状态如何全部测到,如:未处理,处理中,处理失败,处理成功

跟上面一样,也是考察造数据,修改数据的状态

十、get和post的区别
 
十一、post请求的四种参数形式是什么
application/x-www-form-urlencoded 
multipart/form-data 
application/json 
text/xml
十一、公司有用到第三方服务,出了问题,打电话给第三方,第三方不承认,这时候日志又显示不到错误,应该怎么处理
 
1、单独调用第三方服务,查看返回结果;
2、引入mock机制,假如正常返回的情况下,测试我们的系统是否存在问题;
3、建议开发增加日志,详细记录调用第三方接口的过程,记录调用前接口入参,返参等信息;

十二、接口自动化中的关联怎么处理?

将请求返回的结果反射到类属性中,使用setattr()函数,下个请求调用这个类

十三、自动化测试怎么校验结果?

使用断言,预期结果值和实际结果值进行对比;

十四、自动化使用的测试框架是什么?简述自动化框架的设计、维护

1、自动化使用的测试框架:
语言:python
测试框架:unittest(assertEqual,assertTure,assertFalse)
接口调用:requests(API非常简洁)
数据驱动:ddt(装饰器:ddt类,unpack测试方法装饰器解包时候,data测试方法装饰器,可迭代的数据类型)
注:普通用户,管理用户,数据库,配置文件---基础数据
数据管理:openpyxl(excel,CSV,json,yaml,txt)
数据库交互:pymysql ---根据数据库选择相应的第三方模块来完成
数据格式的转换:eval,json
日志处理:logging ---清晰的执行过程,快速定位问题
持续集成:Jenkins(通过插件HTML Publisher/git/Email Extension)进行自动构建,生成HTML,发送邮件
 
2、自动化框架的设计、维护:
1、数据与代码分离,(数据驱动)==数据驱动框架==
例如:参数不一样,响应不一样
2、结构分层(数据层,用例层,逻辑性)
逻辑层:公用的方法,封装起来,避免用例层的代码冗余
数据层:例如,设计Excel,excel读取,参数化替换等
用例层:存放测试用例
 
十五、在接口自动化测试中都用到了哪些包:
pymysql:连接数据库
ddt:
requests:
urllib:
xlrd:
xlwt:
xlutils:
 
十六、根据什么来做断言?
1、协议状态码: 200,404,503   2、业务状态码:status:0   3、业务数据

十七、具体的在这个项目中自动化怎么应用到实际的,您对自动化结果的分析

完成所有的自动化测试框架的设计和实现后,进行接口测试,然后集成到jenkins,配置定时执行,生成html报表,查看测试通过率,查看接口的功能

每次发版时,进行回归测试,新功能开发未提测前

 十八、做好测试计划的关键是什么?

明确测试目的,增强测试计划的实用性,保证测试用例的实用性和覆盖率,完全需求文档和规格指标书等,严格界定测试周期,测试轮次,测试覆盖模块等

十九、super 是干嘛用的?在 Python2 和 Python3 使用,有什么区别?为什么要使用 super?请举例说明。

super 用于继承父类的方法、属性。super 是新式类中才有的,所以 Python2 中使用时,要在类名的参数中写 Object。Python3 默认是新式类,不用写,直接可用。使用 super 可以提高代码的复用性、可维护性。修改代码时,只需修改一处。

父类:
class Car():
    def __init__(self,make,model,year):
       self.make=make
       self.model=model
       self.year=year
def .....
 
class ElectricCar(Car):
    def __init__(self,make,model,year):     --------初始化父类的属性
       super().__init__(make,model,year):
    def ....
子类就可以使用父类的属性
 

二十、L = [1, 2, 3, 11, 2, 5, 3, 2, 5, 3],用一行代码得出 [11, 1, 2, 3, 5]

答:list(set(L))

二十一、L = [1, 2, 3, 4, 5],L[10:]的结果是?

答:空列表[]

二十二、list= [1, 2, 3, 4],如何得出 '1234'?

list=[1,2,3,4]
list2=''
for in list:
    list2=list2+str(i)
print(list2)
 
### 接口自动化测试常见面试题及答案(基于 pytest) #### 1. 解释 pytest 框架的优势 pytest 是一个功能强大的 Python 测试框架,支持简单的单元测试到复杂的功能测试。其主要优势包括: - **简单易用**:不需要复杂的配置即可快速编写和运行测试。 - **丰富的插件系统**:可以使用大量的第三方插件来扩展测试功能,例如 `pytest-html` 用于生成 HTML 报告,`pytest-xdist` 支持并行执行等。 - **灵活的标记机制**:通过 `@pytest.mark` 可以对测试用例进行分类、跳过或参数化[^2]。 #### 2. 如何在 pytest 中实现接口自动化测试? 在 pytest 中实现接口自动化测试通常涉及以下几个步骤: 1. **请求库封装**:使用 `requests` 库进行 HTTP 请求,并对其进行二次封装以提高代码复用性和可维护性。 2. **测试用例管理**:通过 `pytest` 的模块化结构组织测试用例,利用 `conftest.py` 文件定义全局 fixture 来处理公共逻辑(如登录获取 token)。 3. **数据驱动测试**:使用 `@pytest.mark.parametrize` 实现参数化测试,从而减少重复代码并增加测试覆盖率。 4. **报告生成**:结合 `pytest-html` 插件生成详细的测试报告[^1]。 #### 3. 解释 pytest 中 fixture 的作用及其使用场景 Fixture 是 pytest 提供的一种资源管理工具,用于为测试函数提供准备好的环境或数据。常见的使用场景包括: - **初始化与清理**:例如连接数据库并在测试结束后断开连接。 - **共享测试数据**:为多个测试用例提供相同的数据集。 - **依赖注入**:将复杂的对象实例传递给测试函数。 示例代码: ```python import pytest @pytest.fixture def setup_database(): # 初始化数据库连接 db = connect_to_db() yield db # 清理数据库连接 close_db_connection(db) def test_query(setup_database): result = setup_database.query("SELECT * FROM users") assert len(result) > 0 ``` #### 4. 如何处理接口测试中的认证问题? 在接口测试中,认证是常见的需求之一。可以通过以下方式处理: - **Token 认证**:在每次请求时添加 `Authorization` 头部。 - **Session 管理**:使用 `requests.Session()` 对象保持会话状态。 - **Cookie 管理**:手动设置 Cookie 或者利用 Session 自动管理。 示例代码: ```python import requests session = requests.Session() session.headers.update({'Authorization': 'Bearer your_token_here'}) response = session.get('https://api.example.com/data') assert response.status_code == 200 ``` #### 5. 如何设计接口自动化测试框架? 设计接口自动化测试框架时需要考虑以下几点: - **模块化设计**:将不同的功能模块分开,便于管理和维护。 - **数据分离**:将测试数据与测试脚本分离,常用 YAML 或 JSON 文件存储测试数据。 - **日志记录**:添加详细的日志记录以便于调试。 - **异常处理**:确保框架能够优雅地处理各种异常情况。 - **报告生成**:集成报告生成工具,提供清晰的结果反馈[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值