写在开始
哈哈哈,名字就是噱头啊,大家别在意,其实是应粉丝要求,想学习下 python 自动化测试,就决定跟大家分享下我的经验,不一定讲的有其他人那么详细,但是我一定把最重要的知识都一一列举出来,不过真的有图有真相,刚毕业的时候确实买了一个 5000 块钱的 python 自动化课程。其实不能说课程不好,当时确实对我有一定的引导作用,但是现在想想却不太一样了。
就这?
现在看来,真的是就这,自动化真的没想象的那么难,分享自动化测试的博主很多,网上的教程也是特别多,如果大家想学好,我觉得首先要摆正好态度,抱着有困难的思想去学习,那肯定会半途而废的,第二点就是有些知识点、框架需要大家之后去钻研,不一定所有东西考文章才能获取到,自学很重要,第三呢,学习完还是要自己写一次,运行起来,然后用到实际的工作中,这样才是真正的掌握,还有一点,如果老抱着自己做功能测试,没机会用到,这样也不行,因为不管是功能测试,还是自动化测试,大家都是测试工程师,学习了之后,如果公司没有自动化框架,可以在小组会上提出自己想做自动化,让领导审批一些时间,如果能坚持做下去,那一定会有收益的。要是公司有自动化框架,大家可以参与到自动化框架的开发当中,总之不管是自我提升,还是为公司自动化建设添砖加瓦,学习自动化真的很有必要。
技术栈
抱着学新不学旧的心去学,有什么新框架直接去学应该不会出错。
- 选择语言,语言可按照 自己擅长的去选择,如果初学者建议使用 python,实现起来比较简单,代码比较容易理解。而且 python 相比于 java 等其他语言更适合写脚本。但是不是说只学习 python 就够了,对我来说,作为一个测试,应该至少掌握两门语言,一个是自己擅长平时用到的语言,另一门则是 被测语言,熟悉被测语言能让你更加了解开发实现原理,从而更容易定位 bug。
- 首先是 python 的单元测试框架 unitest 和 pytest,要我选,选最新的肯定没有错,5000 块钱买的课程里学的对燃烧 unitest,但是我后来还是换成了 pytest。因为 pytest 职场参数化,插件化,并且他整合了 unitest,也就是说 untest 的脚本,利用 pytest 也能执行。
- 框架选择,如果是移动端和 web 自动化推荐学习 Airtest,接口自动化不用选,就学 requests 库,常见自动化框架对比:
airtest 简介
Airtest 是 一款跨平台的、基于图像识别的 UI 自动化框架,于 poco 相结合,既能支持传统的元素定位方式,又能支持图像定位方式,不仅仅适用于 android、iOS,还能测试 web 、小程序。简单容易上手。
基础环境搭建
- python 安装:airtest 支持 Python2.7 & Python3.3+,为了合作开发统一安装 Python3.7,方法很多,建议安装 miniconda,用于 python 项目做多版本环境创建与切换的
- adb 安装:mac 下环境下使用 homebrew 安装,安装命令:brew install android-platform-tools / windows 环境下安装 android sdk ,目录 Android/Sdk/platform-tools/adb,配置环境变量即可使用
- Airtest IDE 安装:http://airtest.netease.com/changelog.html
- 如果选用 iOS 设备作为测试系统:则需要安装 Xcode
airtest 以及 python 包环境
- 使用 miniconda 创建一个干净的 Python 虚拟环境 conda create -n name python= 版本
- 激活虚拟环境:source active name
- 安装 airtest 包:pip install airiest
- 安装 poco 包:pip install pocoui
- 注意:网络不好的情况下可以在 install 后加-i https://pypi.tuna.tsinghua.edu.cn/simple 来指定国内镜像源安装
安卓设备连接
注意事项
- 安装手机品牌对应官方驱动,确保手机和电脑进行 usb 连接
- 确保打开手机的开发者选项
- 部分手机需要打开” 允许模拟位置”,” 允许通过 usb 安装”
- 关闭电脑中一些手机助手相关软件
- 连接步骤
- 请使用 USB 线连接手机,手机上出现的 允许 USB 调试 弹窗点击确定,
- 点击连接面板中的 refresh ADB 按钮,设备列表将会刷新,
- 点击列表内对应设备的 Connect 完成连接,
- 若设备未刷出,点击 refresh ADB 按钮.
- 无线连接和远程连接可参考https://www.jianshu.com/p/9d5e3ec88b25
iOS 设备连接
- 使用 usb 数据线连接 iPhone 至 Mac
- 部署 iOS-Tagent 项目
- 项目地址:https://github.com/facebookarchive/WebDriverAgentgit clone
- git clone git@github.com:AirtestProject/iOS-Tagent.git
- Xcode 中选择项目,在菜单栏 product -> Scheme -> WebDriverAgentRunner
- 选择设备,在菜单栏 product -> Destination -> 选择你的真机
- 执行 commond +U
- 设置端口映射
- 安装 iproxy : brew install libimobiledevice
- 终端执行 iproxy 8100 8100 或者使用 wdaproxy 端口与手机设备 id 映射,命令为 wdaproxy 8100 uuid
- AirtestIDE iOS 地址输入框,输入 Mac 的 ip 地址和端口,点击” connect"按钮
单条测试用例编写
# 从api中improt 所有接口
from airtest.core.api import *
# 自动初始化设备 logadir 可以传True False 或者 日志路径,devices传入android:///本机ip+端口 或者 iOS:///本机IP+端口
auto_setup(__file__,logdir=‘’,devices=[“Android:///”])
# 打开微信
start_app(‘com.tencent.mm’)
# 传入坐标
swipe()
# 传入坐标/目标图片
touch()
常用 api
总体方案
Python+ Airtest+pytest +Allure
选择原因:pytest 完全兼容 unitest,并且支持插件化,参数化,Allure 报告简洁,美观,支持接入 jenkins
接口自动化 pytest 单接口调用
def test():
# 请求的url
url = "https://www.baidu.com/api"
# 请求header
header = {
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.15(0x18000f2d) NetType/WIFI Language/zh_CN'
}
# 请求参数
params = json.dumps({
'userId': '7375860179',
'roomId': '122713',
})
# 发送post 请求
n = requests.post(url, data=params, headers=header)
# 打印请求结果
print(n.json())
自动化框架设计方案
自动化框架设计方案都是大同小异,都是基于 po 模型去设计的,我之前所做过的自动化框架都是基于下面这个模版进行开发的,如果理解了这个模版,读懂其他人的框架,自己去开发框架也不在话下了,
- config :每一个框架都会有配置文件,用来存基础 、变动小的一些数据,python 配置我文件种类也有很多,这里选用 ini 文件。globelsetting 文件用来读取全局配置文件入口。
- pagePic 文件目录 用来存放页面元素 ,airtest 可以存放页面图片等,接口自动化可以调整为 testData ,为测试数据目录
- public 目录 为公共方法目录, common 为封装 请求,或者 airtest api 的公共方法目录,uity 为工具类
- testcase 就是测试用例目录,我们也可以把用例划分下等级,分为不同的目录,方便为后续执行那些用例做准备
- test Report 目录,为测试报告存放目录,执行测试用例后生成测试报告,存放在该目录下
- run_all_case 文件为入口文件,也就是执行入口。
框架设计源代码
代码放在这了,有需要自取
https://gitee.com/xiaobagedaifei/Apitest
写在最后
我是小巴哥,一个陪你成长,实实在在分享 测试干货职场经验的人,欢迎关注!!!
↙↙↙阅读原文可查看相关链接,并与作者交流