因为这套自己搭建的接口自动化测试框架,成功入职阿里,拿下19k

Posted 百里测试开发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了因为这套自己搭建的接口自动化测试框架,成功入职阿里,拿下19k相关的知识,希望对你有一定的参考价值。

1. 安装依赖模块

在开始编写测试框架前,需要先安装以下依赖模块:

  • requests:用于发送HTTP请求;
  • pytest:用于执行测试用例;
  • allure-pytest:用于生成测试报告。

我们可以通过命令行安装:

pip install requests pytest allure-pytestsh

2. 目录结构

在开始编写测试用例前,我们需要先建立目录结构。这里我们建立如下目录结构:

- api
  |- __init__.py
  |- user.py
- tests
  |- __init__.py
  |- test_user.py
- report

其中,api目录用于存放封装了API请求的模块,tests目录用于存放测试用例,report目录用于存放测试报告。

3. API请求封装

api目录下新建一个user.py文件,用于封装用户相关的API请求。这里我们假设接口文档中有以下三个接口:

  • 获取用户列表:GET /api/users
  • 创建用户:POST /api/users
  • 删除用户:DELETE /api/users/user_id
import requests

class UserAPI:
    def __init__(self, base_url):
        self.base_url = base_url

    def get_user_list(self):
        url = f"self.base_url/api/users"
        resp = requests.get(url)
        return resp.json()

    def create_user(self, data):
        url = f"self.base_url/api/users"
        resp = requests.post(url, json=data)
        return resp.json()

    def delete_user(self, user_id):
        url = f"self.base_url/api/users/user_id"
        resp = requests.delete(url)
        return resp.json()python

4. 测试用例编写

tests目录下新建一个test_user.py文件,用于编写测试用例。这里我们使用pytest框架来执行测试用例,对于每个测试用例,我们需要实例化UserAPI类,然后调用对应的API方法进行测试。

import pytest
from api.user import UserAPI

@pytest.fixture(scope="module")
def api():
    return UserAPI(base_url="http://localhost:8080")

def test_get_user_list(api):
    resp = api.get_user_list()
    assert(resp["code"] == 200)
    assert(len(resp["data"]) > 0)

def test_create_user(api):
    data = "name": "test user", "email": "test@example.com"
    resp = api.create_user(data)
    assert(resp["code"] == 200)
    assert(resp["data"]["id"] is not None)

def test_delete_user(api):
    data = "name": "test user 2", "email": "test2@example.com"
    resp = api.create_user(data)
    assert(resp["code"] == 200)
    user_id = resp["data"]["id"]

    resp = api.delete_user(user_id)
    assert(resp["code"] == 200)python

5. 执行测试用例

在命令行中执行以下命令,即可执行测试用例:

pytest --alluredir=reportsh

其中,--alluredir参数指定了测试报告的存储路径。

6. 查看测试报告

执行完测试用例后,可以使用以下命令来生成测试报告:

allure serve reportsh

这里我们使用了allure命令来启动一个本地的Web服务器,然后在浏览器中打开http://localhost:port即可查看测试报告。

7. 结语

以上就是一个基于Python语言的接口自动化测试框架,并使用Allure输出测试报告的整个流程。当然,这只是一个简单的示例,实际项目中可能需要考虑更多的因素,比如接口响应时间、并发测试等。

6年测试开发经验面试28K公司后,整理出这套高频面试题和答案

我第一次接触自动化是在2016年。那时刚毕业一年有余,组内一直做手工功能测试,大概在2018年9月,部门领导要求测试组引入自动化。组内之前从没有开展过任何自动化,测试主管安排了一个刚入职不久的研究生同事去研究。

当时自己内心还有点狭隘 觉得为啥别人可以领着薪资学习,而自己先入职,只能测功能,加班还最多。过了3周左右他的一些框架写出来了,给我们介绍,可惜自己太菜,不懂 python,也从未接触过selenium和unitest。

当时看着别人有进步,自己就去看python书,可惜心里想着要提升,又没有积极性,无法专心,最多能专心看十几分钟。自认为可以参照别人写出来的脚本写自动化了,当时看人家脚本还问了一个很傻的问题,现在都还记忆犹新,当时问了“为啥代码里在用变量时,有的后面需要带括号,有的不需要”。 那时自己不知道类,不知道函数,只知道变量,后面代码用的前面能找到就是调用变量。

就这样第一次学习python自动化的事情就这样不了了之了。

参与了自动化,但又没完全参与

2019年4月1号入职我职业生涯的第二家公司,这里测试还是以功能为主,前后开展过两次自动化测试,第一次用的是robotframework框架,大家都没有参与的积极性,且业务数据依赖硬件实时采集,引用自动化提高效率效果甚微,后来也就暂停了。

第二次是2020年下半年,公司自研的自动化平台上线,可惜主导接口自动化的不是组内人员,是其他组的人员。自研平台是可视化的,底层都是封装好的,使用者只需要填写URL,参数就可以发起调用,简单做下状态码断言。整个过程我写的接口还不足50个,虽然参与了,但是不理解原理

这两年在组内觉得成长了很多,所以21年4月准备离职的时候,信心满满,觉得应该很快就能找到工作,但实际是连连失败,一个月半才面过了两家

复盘面试,自我审视

当时最大的感受就是,可以选择的职位太少,感觉自己要被这个行业淘汰了一旦被问到接口自动化,接口基础,python基础的问题自己就答不上来了。有的一面过了,二面因为一些坑也频频被淘汰。

于是我分析了一下连连失败的原因:

  • 自己的简历上没有任何技术含量,虽然参与过接口测试,因为不懂原理,不知道接口基础,也无法展开写。
  • 通篇简历都是大段大段描述项目流程,工作日常的内容。投出10份简历,最多能收到1个面试邀约。
  • 感觉自己要被这个行业淘汰,可选职位的太少。总结时想明白:我忽略了自己不懂技术,5年都是纯手工测试的问题。而招聘者如果只想找一个测试功能的,会选择1-3年经验的应聘者,因为薪资肯定比我6年工作经验的要的少
  • 频频被刷的原因:回答自己踩坑且不自知。当时有一个公司自己也挺想去的,最后HR面频频踩坑

**第一个问:为什么离职?**我如实回答:工作量大,薪资低。HR接着问:那你现在是想找一份稍微安逸一点的工作,还是薪资高一点的工作?钱和工作量你更在乎哪一个?一看这个问题就知道自己给自己挖坑了,选择哪一个都不好,完全否定掉又与前面的离职原因不符。

**第二个问题:现在手上有其他Offer吗?**我说有,他接着问了:给你开了多少薪资。我回答了比给的多了两千,HR就说:这个公司能给这么多呀。我一听心里咯噔了一下,这个HR是了解这个公司的,然后HR也就没有在往下问了。

同样起跑线,两年就能拉开距离

基于以上不停复盘总结,总算找到了工作。这次跳槽对我打击挺大的,一个打击是做了6年的测试,不懂代码、没有深入接触自动化,出去找工作简历上一点优势都没有。

另外一个打击是,我的两个大学同学兼舍友也入职了这个公司不,我们都重新找工作,结果他比我晚一周找工作,却比我先找到新工作,还拿到20k+的薪资,应聘的职位是测开岗,而且都至少会一门代码语言。而我呢,别说20k+,连预期的18k都没有哪个公司能给到。

当时感觉自己特别焦虑,同样的起跑线,仅两年时间就拉开如此大的差距。

为什么会有那么大差距?我认为主要原因就是过去的两年,自己没有主动额外去学习提升技术。看到这样的差距,当时开始在网站上看自动化相关的博客。网上相关的博客上千万,但是一篇博客只是一个小知识点,并且没有人解答,需要看很多博客才可能把一个知识点搞清楚,写的比较有技术含量的呢自己又看不懂,就如置身大海、毫无方向。

功能到自动化,这次我只用了16周

这时机缘巧合,关注到了华测教育做的学习交流群,无意间看到课程的推送,当时觉得课程目录大纲都是实用的干货,有我第一家公司用的selenium,当时自己真的太想找到学习方向、学习方法了,就抱着试试的心态买了python自动化课。

6月19号开课,10月23号课程结束。这4个月我收获满满。现在的我已经培养了学习的习惯,如果一段时间比如一整个周都没有学习输入,我就会开始焦虑。

通过这次学习,原来我也能掌握一门代码语言,那同样的,我也能掌握其他语言,并且现在去学习其他语言会更快。仿佛打开了我学习的世界,我现在已经给自己规划了好多学习计划,有进阶课程,测开可,性能可,还有一些其他课外书。原来学习真的可以使人快乐。

2021年11月我应聘上了自己心仪的公司,拿到了期望的薪资28K。这个目标本来是计划2022年上半年实现的,现在提前实现了。除了学习了自动化,python语言外,还免费学习了linux指令,以及一些面试技巧,知道了自己曾经是怎么踩坑的。

拿了28k,分享一下被问面试题

接下来我还想和大家分享下第二次找工作的面试经验,这次找我的公司大多是测开岗,而且曾经在自己看来是天花板的公司,如阿里、网易、华为、蚂蚁、字节,以前连投递简历的勇气都没有,而这次多个招聘主动找我,并且简历都通过了。

还有一个明显的差别就是每一轮面试,自动化相关的至少占一半,有两家整个一面都是在问自动化相关的问题,以前都是业务功能测试的问题,这里给大家列一下这次找工作被问到的一些问题

接口的请求方式有哪几种,分别表示什么意思

POST和get请求方式的区别

http和https协议的区别

接口的几个状态码介绍一下

元组,列表,字典的区别(python基础高频题,被问了好几次)

给一个字符串怎么转为为json体(考json.loads(),eval())

给一个文件,查找里面的某串字符(考正则表达式的findall()和sub())

接口的请求头你们都处理些什么

怎么做断言

接口用例怎么设计

怎么做接口测试

接口的关联怎么处理

自动化怎么筛选回归用例,冒烟用例

用过哪些钩子函数

用过哪些python解释器

pytest的原理是怎样的

pytest框架都用过哪些

自动化中怎么处理报告的

python的解释器,迭代器,生成器有了解过吗

ui定位元素有哪些

可变元素怎么做定位的

ui自动化中有些用例失败了,可以附截图吗?

自动化用例有多少条

什么是持续集成

持续集成怎么做到定点自动执行

linux查看文件的指令有哪些

linux编辑文件的指令用哪个?使用过哪些快捷键

怎么开启一个线程

线程和进程的区别是什么

开启线程有几种方法了解过吗

了解基础的性能指标吗

怎么判断性能指标是正常的?

介绍下你的框架

你觉得你的框架有什么优点

你觉得你的框架和别的框架相比有什么不足

从页面输入一个url到页面加载出来数据的过程描述一下(字节的一轮面试题)

你在做自动化遇到的难点是什么,怎么解决的

现场写代码1: 给定两个已经排好序的列表,重新组合在一起排序

现场写代码2:给一个字符串,每个单子倒叙打印出来

现场写代码3:给定一串字符串,输出回文字符串(字节一面程序题)

怎么确保你负责的产品的交付质量

在这个项目中你遇到的问题是什么

你目前工作中遇到的最大问题是什么

篇幅限制,仅展示了部分目录,需要面试题文档完整版的,【点击文末小卡片链接】通过后自行下载。

该如何深入进阶自动化?

处在功能测试阶段的如何进阶自动化测试呢,下面看我自己结合学习和工作经验得到的路线,给想在测试行业一路走到黑的朋友!

一、软件测试基础理论知识:

  • 软件测试理论知识是开展测试工作的理论依据和支撑,是测试很重要的阶段必须掌握的技能。
  • 软件的质量模型:软件测试过程保障软件的质量,从哪些方面保障可以从质量模型出发思考
  • 测试分类:软件测试过程可以按照不同角度进行分类,基础测试到高级测试递进过程
  • 开发流程:告诉测试人员一个软件完整的生命周期,软件从无到有到消亡的过程
  • 测试流程:掌握并指导测试人员在实际项目中如何开展测试工作。这要求测试人员对常见的主流测试流程有较为透彻的理解。遇到不同的软件项目,知道从何处着实能最有效率的测试软件缺陷
  • 测试计划与方案:如何规划在项目中开展测试活动,确保测试活动有序进行
  • 设计用例方法:黑盒测试阶段必须掌握的一些测试用例的设计方法。比如黑盒测试用例的设计方法、测试用例元素等等
  • 软件缺陷:在测试执行过程中应该确定缺陷并提交缺陷报告
  • 缺陷管理:提交缺陷后在实际工作中如何和开发协助处理验证提交的问题。例如:bug的等级优先级分类、bug的描述、bug的生命周期、缺陷管理工具使用,如禅道等。
  • 测试报告:测试过程的回顾和结果确认,生成系统性的专业软件测试评估报告。 -

二、软件测试功底技术——Linux系统

linux系统是主要的服务端操作系统,也是从事IT岗位的大部分人员必须具备的基本技术之一。

  • linux系统基本知识:多用户,多任务,发行版本等
  • 常见 linux操作命令:日志查看,文件压缩、解压,用户管理,文件权限等
  • 会部署和配置基本的应用jdk、 mysql、 tomcat
  • docker安装使用
  • 编写基本的 shell RAD本
  • 远程终端工具使用: shell, xftps等

三、软件测试功底技术——Sql数据库

数据库作为软件系统必备的应用系统,在诸如接口测试、性能测试等等过程中往往需要操作数据库,验证数据正确性完整性,都离不开数据库的增删改查操作,在项目部署阶段数据库还需要配合项目部署。在性能测试、接口自动化测试中都需要数据库的支撑。

  • 数据库基本概念
  • 关系型数据库
  • MYSQL基本的增改查语句,存储过程
  • MYSQL复杂查询、多表查询
  • MYSQL索引及事务相关概念
  • 数据库客户端工具使用:如 Navicat

四、软件测试功底技术——编程语言

编程语言推荐大家以Python为首,Java语言为辅学习,查看各大招聘网站,基本上也是以这两种语言为主的。没有编程基础的朋友可以先学习Python语言

Python语言的学习内容包含以下知识点:

  • Python基础:Python语言特点、运行环境、基本语法、代码风格、示例程序
  • 数据结构:基本数据结构:数字、字符串、类型判断、类型转换、切片、字符串格式化、数值运算、位置参数和关键字参数;组合数据结构:列表、元组、范围、字典、集合、不可hash对象、解包、内存地数据结构址、不可变数据
  • 程序控制:顺序结构、循环结构、判断结构、异常处理、逻辑运算符
  • 函数:定义函数、函数的参数、返回值、变量作用域、匿名函数、常用内置函数
  • 模块和库:模块和包、import关键字、常用标准库、常用第三方库、包管理工具pip
  • 面向对象:面向对象起源和优势、面向对象的特性类和对象的联系、对象的特殊方法
  • 日志记录:baseConfig、文件日志、邮件日志、定制格式、内置占位符、等级过滤、分级传播、配置文件
  • 测试框架:unitest、pytest等
  • 并发编程:多进程、多线程、协程、线程池、同步控制、线程通信、分布式、猴子补丁、 async语法、生成器
  • 网络编程:socket编程基础、TCP服务端和客户端、并行请求处理、HTTP服务端和客户端

五、软件测试自动化进阶——接口测试

接口测试本质也是功能测试的一种,通过脚本或者工具,模拟客户端对服务端接口进行调用。因为是从接口层测试,所以能更早的发现问题,从而提高测试效率,降低修复成本。

  • http/httpst协议学习
  • 常见请求方法学习:GET、POST
  • cookie和 session学习
  • 接口的基本概念
  • 接口文档认识
  • 接口测试用例编写
  • 接口测试工具使用:postman、Jmeter、SoapUl

六、软件测试自动化进阶——性能测试

性能测试的技术要求很高,不仅仅要对性能测试的指标、测试分类、测试设计有很深刻的理解。还要学习系统业务和架构相关知识,这样才能更好的设计性能场景。

  • 性能基本概念:性能测试意义、常见性能指标理解、性能测试的分类
  • 性能测试流程:性能需求分析、性能场景设计、测试脚本编写、测试执行资源监控、性能调优、回归测试
  • Jmeter及 roadrunner使用
  • 性能测试报告输出

七、软件测试自动化进阶——web自动化

了解自动化的目的,熟练掌握TestNG&unittest自动化框架,以及断言与日志处理;做测试的同学们都了解,做Web自动化,我们主要用Selenium或者是QTP,这里我们需要掌握Selenium的web自动化环境搭建,正确的浏览器配置。

八、软件测试自动化进阶——app自动化

越来越多的项目和系统通过移动端来提供服务,移动端的软件质量越来越重要,App自动化测试已经成为自动化测试的重要内容。借助Appium,使得App自动化测试和Web自动化测试有很多相通之处,不过作为测试工程师,依然需要掌握移动端应用的工具和特性。

  • Appium移动测试环境搭建:Appium ServerAppium和 Desktop、 Android运行环境搭建、模拟器安装和连接、真机设备调试模式、adb、 weditor、 - - UiAutomator22、 Monkey
  • Appium元素定位:原生应用元素定位、纯web应用元素定位、混合应用元素定位
  • Appium元素交互:等待元素加载,元素的基本属性和方法、滑动、拖动、缩放操作、下拉选择操作、 toast消息处理、常见控件分析、常见布局分析
  • 封装测试框架:集成Appium、adb等工具、预定义异常处理、记录Appium日志、屏幕截图、打造多用途测试框架

九、软件测试自动化进阶——持续集成和持续测试

持续集成和持续测试是一个在迭代中构建、测试产品并修复Bug的过程。它有助于团队在开发阶段的初期发现缺陷,这时的缺陷通常相对不那么复杂,并且更容易被解决。通过持续集成和持续测试,可以尽早地将错误风险降至最低,并加快交付更好质量的软件。

  • 版本控制Git:背景介绍、环境部署、工作区、暂存区和提交区、分支创建与合并、解决冲突、标签、 config与别名、本地仓与远程仓、 GitHub与码云
  • 持续集成 Jenkins:背景介绍、环境部署、文件结构、远程仓库与私服、ja包依赖、插件管理
  • 容器Docker:了解 Dockers的镜像、仓库、容器、 Docker Engine和架构图、网络设置、数据持久化

上面就是我为大家整理出来的一份软件测试工程师发展方向知识架构体系图。希望大家能照着这个体系,完成这样一个体系的构建。可以说,这个过程会让你痛不欲生,但只要你熬过去了。以后的生活就轻松很多。正所谓万事开头难,只要迈出了第一步,你就已经成功了一半,古人说的好“不积硅步,无以至千里。”等到完成之后再回顾这一段路程的时候,你肯定会感慨良多。

我也分享一些软件测试学习资料,对于学软件测试的小伙伴来说应该会很有帮助,有需要的朋友可以点击下方卡片进去自取,除了基础入门的资源,大家在里面也上传了不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。

写在最后

最后在唠唠一句,如果想以测试为长期发展职业目标,是需要时刻保持学习的,要使自己具备竞争力,无论你现在工作几年,只要行动起来,你就已经占优势了,好啦就到这里了,祝大家2022年能升职加薪,拿到心仪公司的offer,事事顺遂。

视频文档获取方式:

这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片进群即可自行领取

以上是关于因为这套自己搭建的接口自动化测试框架,成功入职阿里,拿下19k的主要内容,如果未能解决你的问题,请参考以下文章

API接口自动化测试框架搭建(二十七)-如何修改框架为通用性框架或适合自己的项目?

6年测试开发经验面试28K公司后,整理出这套高频面试题和答案

6年测试开发经验面试28K公司后,整理出这套高频面试题和答案

API接口自动化测试框架搭建-接口调试工具postman安装配置及使用

接口自动化框架(java)--5.通过testng.xml生成extentreport测试报告

程序人生:程序员面试成功入职阿里!工作仅两个月却决定离职?