接口自动化已经是软件测试自动化领域里,公认的性价比最高的方式了。

很多初学者都是从写 Python 脚本开始的,从一个人写脚本,逐渐的和团队一起写工程。

本篇文章就来聊一聊接口自动化从个人走向团队协作开发的历程和方案。

单机版

大家入门学的接口自动化基本都是按这个目录来组织的,或者类似于这样的目录

case:测试用例

common:公共函数

config:配置

data:数据

result:测试报告

util:工具类

run.py:用例执行入口

run_mail.py:执行后自动发送邮件入口

单机版的玩法,是自己写完之后,上传到运维服务器,开个定时任务跑脚本,输出测试报告,发送邮件。

大家看到你的测试报告,纷纷夸赞,大佬牛牛牛。你也会谦虚,我只是个渣渣。

版本管理

随着代码写的越来越多,就会油然而生一种感觉,自己的代码这么牛!是不是需要备份一下哇,不然万一哪天硬盘坏了怎么办。还好懂点 Git。

Git 是一款分布式的版本管理工具。分布式,可以理解为,代码是分布在服务器和各台电脑上的,把代码都备份了一份。Git 是工具,不存放代码,代码是存放在 “网盘” 上面的,也就是代码托管平台。代码托管平台公开开源的有著名的全球的 GitHub,也有国内的 Gitee(码云)。公司内部用的多的是 GitLab 和 Bitbucket 等,私有部署,保密。

本文以 GitHub 为例,讲解如何上传 Python 接口自动化代码。

第一步先在 GitHub 上创建仓库,需要填写仓库名,公开/私有等

第二步在测试项目中添加 .gitignore 文件,忽略掉不需要上传的文件,如 PyCharm 配置、缓存等

.idea/
.pytest_cache/
__pycache__/
*.pyc

第三步把本地的脚本,初始化并上传到代码仓库里面去

git config --global user.name "xxx"
git config --global user.email "xxx"
cd existing-project
git init
git add --all
git commit -m "Initial Commit"
git remote add origin ssh://git@xxx.com:8022/dongfanger.git
git pull --rebase origin master
git push -u origin master

代码备份好了,心里面踏实了。

而且还能在 PyCharm 查看自己的提交记录,舒服

团队协作开发

自己能写代码了,也能用 Git 做代码版本控制管理了。众人拾柴火焰高。本文以 pytest 测试框架为例,讲解如何使用 Git 完成团队协作开发。

在这之前,先介绍一款测试工具 tep,也就是 try easy pytest 的缩写,辅助你更好的使用 pytest。

tep

tep,是我参考 HttpRunner 开发的一款小巧的测试工具,GitHub 开源地址是
https://github.com/dongfanger/tep
感兴趣的同学可以康康。

安装 tep,tep 已发布到 pypi,直接使用 pip 就可以安装

pip install tep

tep 提供了脚手架,使用 startproject 命令就可以创建初始化项目目录

tep startproject demo
>tep startproject demo
2020-10-15 21:11:05.806 | INFO     | tep.scaffold:create_scaffold:40 - Create new project: demo
Project root dir: C:\Users\demo

Created folder: demo
Created folder: demo\tests
Created folder: demo\files
Created folder: demo\fixtures
Created file: demo\.gitignore
Created file: demo\conf.yaml
Created file: demo\conftest.py
Created file: demo\pytest.ini
Created file: demo\tests\__init__.py
Created file: demo\fixtures\__init__.py
Created file: demo\fixtures\fixture_admin.py
Created file: demo\fixtures\fixture_don.py

创建好的项目结构是这样的

files:文件,如 excel 导入.xlsx

fixtures:pytest fixtures

tests:测试用例,所有测试脚本都放这个文件夹

.gitignore:Git 忽略文件

conf.yaml:配置 yaml 文件

conftest.py:引入 fixtures、hook、插件等

pytest.ini:pytest 配置文件

写这篇文章时,tep 的版本是 0.4.0,不稳定,仅供参考和学习交流

拉分支

主干分支是 master

每次需要写脚本,就从 master 拉取分支

checkout 切换到 master 之后,先 pull 一下获取最新代码

git checkout master
git pull

再创建新分支

git checkout -b branch_name

也可以在 PyCharm 中通过界面的方式创建

分支名按实际意义来写,比如 feature_add_something。

在分支写完脚本后,使用 add commit push 命令,把本地的代码同步到代码仓库的远程分支上

git add .
git commit -m message
git push

初次提交 push 可能会报错,照着报错提示再 push 一下就可以了。

完成后代码仓库就会多一个新的分支

每次要完成一些脚本,都重新拉取分支,把任务拆分,方便跟踪和追溯。

多个任务就会形成多个分支,多个团队人员也会形成多个分支,最终分支就会变成这样

合代码

接着就需要把分支代码合并到 master

第一种方式是在 PyCharm 手动执行 git merge 命令来合并。

第二种方式是走 Pull requests。本文介绍第二种,因为可以在界面上操作,便捷直观,而且有审核机制。

Pull requests 的思路是在页面上发起请求,从分支合并到 master,管理员接收到请求后,查看差异,审核是否允许合并。

本文以 GitHub 为例,演示如何使用 Pull requests 进行代码合并。

打开代码仓库后,切换到 Pull requests 标签页,创建新的 pull request 请求

然后选择从哪个分支合并到 master

在这个界面也展示了分支和 master 的差异,不同托管平台有不同的界面,但都能找得到。

选择好合并的分支以后,就可以确认创建了

创建成功,管理员在标签页上会看到有个数字角标,标明了提交的 pull request 数量

在标签页的列表中,打开 pull request 之后界面如下

  1. Files changed 查看文件差异
  2. 没有问题点击 Merge pull request 合并
  3. 审核不通过点击 Close pull request 拒绝

至此,就完成了从分支到 master 的代码合并。

解决冲突

如果各个分支都提交的不同文件,Git 会自动合并。如果提交的有相同文件,就会发生冲突,无法自动合并,Git 也不知道以哪个为准,创建 pull request 会告诉你不能自动 merge

只能手动来解决。建议让管理员来统一处理,如果有能力保证不出错,也可以自己完成。

本文以 PyCharm 为例,讲解如何手动解决冲突。首先在项目文件夹右键选择 Merge Changes

再选择分支,比如图中从 feature_conflict 合并到 master

接着点击 Merge 按钮,会提示冲突

1 Accept Yours 接受你自己的忽略其他人的。

2 Accept Theirs 接受其他人的忽略你自己的。

3 Merge 根据文件内容来选择

两边分别是 master 和分支的内容,中间是合并后的结果。

点击 >> 或 << 可以把 2 边内容,选择性的合并到中间,如果文件中有多个地方不一致,在不一致的地方都会有 >> 或 <<。

最后点击右下角 Apply 即可。

规避冲突

本小节为实验内容,对 tep 不感兴趣的同学可以跳过。

tep 提供了规避掉部分冲突的方法。第一个方法是共享变量用 fixture 来传递,fixture 是实现了依赖注入的,只需在 test 引用就可以了,不同团队成员可以互相引入 fixture,从函数的维度规避冲突。同时把返回值定义为 class,在写代码的时候,可以链式调用,敲关键字后弹出来提示内容,省去了输入全名的麻烦。第二个方法,是把不同的 fixture 放在不同的文件,管理员维护公共的 fixture,定义在 fixture_admin.py 中。团队成员创建自己的 fixtures,放在 fixture_your_name.py 中,从文件的维度规避冲突。tep 仍然在不断优化,感兴趣的同学可以关注公众号,最新进展我会第一时间分享。

简要回顾

本文先描述了从单机版到版本管理的历程,接着讲解了团队协作开发。以 GitHub 为示例,详细介绍了如何使用 Git 完成创建仓库、初始化项目、上传代码、拉分支、合代码, 如何解决代码合并冲突,以及 tep 规避冲突的实验性内容。

如果你有更好的方法,欢迎留言讨论

如果你觉得这篇文章写的还不错的话,关注公众号 “测试老树”,你的支持就是我写文章的最大动力。


↙↙↙阅读原文可查看相关链接,并与作者交流