说下你的编程能力。
我有Python编程能力,Python是一边在工作中,一边学习,学习的主要目的是为了能够在工作中提高自己的测试效率,保证测试工作,最终还是保证软件质量。
我熟悉Python编程的基本语法,比如基本的数据类型,循环,条件控制,函数。
也是熟悉使用一些常见的模块比如 os,csv,random。
能够使用这些技能满足测试的一些需求,比如在做接口测试的时候,需要测试单接口的异常场景,这些异常场景数据比较多,使用postman,jmeter 工具做接口测试时可以使用csv数据驱动方式来做,但是csv中的数据原来都是人工添加的。我在学习python编程的时候,一边学习,一边思考如何快速生成这些数据。使用csv模块,for 循环通过指定的数据能够生成csv文件。这样在测试异常场景的时候数据比较快速。
我这边也在了解 pytest,requests 库 来使用python 来做接口的自动化。使用requests可以模拟场景的接口测试场景,比如 发送基本的get,post请求,以及post请求中不同的请求数据类型像 json格式,x-www-formurlencode 表单格式,以及封装信息头,添加cookie,文件上传,下载这些都可以做。
并且也熟悉使用 python进行上下游传参做接口串联,添加断言这些操作。
break 与 continue的区别。
break 是中断整个循环, 循环终止。
continue 是结束当次循环不会执行下面的代码,但是不会终止整个循环。
使用postman,jmeter 这些工具都已经可以做接口测试,为什么还要使用Python编写代码来做,编写代码明显比使用Postman 要难一点?
postman,jmeter 入门非常容易,可以快速做接口测试,但是使用工具有明显局限性。使用工具会受到工具本身的制约,比如使用postman,postman 中没有提供连接数据库的方式,那么在postman 中就不能连接数据库。jmeter 中可以使用jdbc 来连接数据库,工具提供这样的功能才能使用。另外 jmeter的报告非常简单,想要整理一份详细的报告,也会收到工具本身的显示。
但是使用python代码,自己可以根据自己公司的业务进行相应的操作。想要什么功能,自己可以使用代码来实现,不会受到工具的制约。
在项目前期,做接口可以使用工具,主要是能够快速验证自己的接口功能。但是随着项目越来越大,自己内部有自己的特殊功能的时候,可以使用代码来实现,更加灵活。
自动化项目结构是怎么样的?
所有的测试用例统一放在 testcases 包下,所有的测试用例文件都以 test开始,在测试用例中,测试用例的函数 也是以test开始。 命名的时候根据 业务场景进行命名。
用例文件有 test 在pycharm 中可以自动识别为用例。方便调试运行。
列表,元组的区别?
定义方式上:
列表使用 [], 元组使用 ()
常用方法上:
都可以通过索引来访问里面的元素。
列表可以对数据进行修改,删除,添加,但是元组定义好之后,数据不能修改。列表可以排序,元组不可排序。
使用场景上:
比如用来写入测试数据到csv文件中,csv文件的表头一般定义好之后不做修改,可以使用元组。
下面的数据,可以进行修改,这些数据可以使用 列表来存储。
字典,集合的区别?
定义上:
定义一个空的集合,使用 set()
定义一个空的字典,使用{}
内容上:
字典使用 key:value 键值对的方式。字典的key 值不重复,key一般是不可变类型,比如数字,字符串,也可以元组。
集合的数据是无序,不重复的。不能通过索引来访问集合中的元素。如果有重复的数据,能够自动去重。
使用场景上:
我们做接口测试过程中,查询的参数,信息头,请求的body 数据,都是使用的字典的格式。
一般在做一些数据去重的工作时,可以将数据转换为集合set来进行去重。
requests在做接口测试的时候 主要的方法有哪些?
当在面试的时候,介绍自己会使用requests库,要说明下发送请求时主要的使用功能。
使用requests 库模拟发送常用的请求,比如get post put delete 这些。
使用的方式,需要传入请求地址 url, 以及对应 headers 信息头。信息头数据使用字典格式,将值传递给headers。
get 请求的查询数据一般用字典格式的数据传递给 params
post 请求的body数据 一般用字典格式的数据传递给 data 或者json
- data 表示传递的数据类型为 x-www-form-urlencoded
- json 表示传递的是json格式的数据。
如果请求中有需要用到Cookie ,将Cookie放在headers 信息头中。
个别上传,下载接口,也可以使用requests。
上传接口 使用 open函数 打开文件,如果是图片,视频的时候,权限值中加入b,使用open打开之后传递给files参数即可。
下载接口,首先拿到服务器返回接口 使用content 拿到内容,使用 open 权限值使用 wb 写入到文件中。
自动化接口测试中怎么讲接口进行串联(上下游传参)。
因为在自动化过程中,每个接口都放在一个 test 的函数中,一个test函数就是一个接口用例,函数中的变量只能在函数内部有效,不能传递函数外边引用。
在传递参数的时候,使用Python的可变类型数据进行传参,比如使用字典,在函数外部定义一个字典,上游接口中的用例服务器返回结果中要传递参数的部分更新到字典对应的数据中,下游接口通过引用字典的方式来获取到最新的值。从而实现上下游的传参。
自动化接口测试中单接口是怎么做的?
单接口需要考虑不同的测试场景,每个场景的测试数据不一样,
- 将不同字段的可能数据整理出来,通过嵌套循环可以生成不同的排列组合,将生成的数据放在列表中。
- 使用pytest参数化装饰器 @pytest.mark.parametrize 将生成的数据传递进来,每个数据对应设置变量。
- 不同的数据添加不同的断言,执行的时候就可以批量执行。
接口自动化项目框架介绍一下。
项目框架我是一边学习一边自己搭建整理,可能还有欠缺,但是主要为了方便我自己来做接口自动化,所以在项目结构上主要
- common 包 存放测试过程常用功能函数,比如项目目录相关函数,以及自己定义的一些基础的测试数据生成 生成手机号码。
- config 包,配置文件包,存放上下游传参配置,以及一些基础数据配置,生成身份证号的 地区编码文件。
- csvdata 存放单接口的测试数据
- reports 存放生成的测试报告。
- test_cases 存放接口测试用例相关文件。
- main.py 程序运行的主入口文件。
自动化接口的测试用例使用怎么维护的?
一般情况下,我们公司的接口定义好之后很少修改,所以我这边只要在编写之后添加相应的断言,能够正常执行,后面就作为回归或者冒烟测试用例。
在test_cases 目录下将正常的业务流接口放在一个包下,单接口用例放在一个包下。正常业务流存放的主要是一些基本的业务流程代码,通过上下游传参,将接口关联在一起,每个接口根据业务添加对应的断言,跑主流程的时候,只要接口传参正常,整个业务流就能跑通。
单接口主要讲主要接口,使用正常场景的数据,异常场景的数据 一部分通过 嵌套循环的方式来生成,以及根据不同的字段添加不同异常场景断言,运行时候通过 pytest参数化功能批量执行。