0
点赞
收藏
分享

微信扫一扫

使用pytest-xdist实现分布式APP自动化测试:基于socket

逸省 2022-07-12 阅读 59

前言

在上篇文章《使用pytest-xdist实现分布式APP自动化测试:基于SSH》​中,尝试了使用SSH来实现master和worker的通信网关,现在来看下使用socket怎么实现。其实在最开始的《使用pytest-xdist实现分布式WEB自动化测试》已经提到过socket,这次再将实现APP自动化测试的细节做一说明

项目环境

系统环境

角色

系统

Python版本

ip

master

Centos7.6

v3.8.0

192.168.0.109

worker1

Centos7.6

v3.8.0

192.168.0.126

worker2

Centos7.6

v3.8.0

192.168.0.136

客户端环境

测试机

系统

ip

tcpip

逍遥模拟器-1

v7.1.2

192.168.0.112

6666

逍遥模拟器-2

v7.1.2

192.168.0.113

6666

运行环境

容器

版本

端口号

宿主机器

appium_2

v1.17.0

4725->4723

worker1

appium_2

v1.17.0

4725->4723

worker2

项目结构

主要的测试用例存储在test_case.py中,main.py是运行入口

APP_Xdist_AutoTest
|--allure_reports
|--common
|--base_driver.py
...
|--caps
|--cpas.py
|--images
|--html_reports
|--logs
|--page_objects
|--base_page.py
|--login_page.py
...
|--test_cases
|--conftest.py
|--test_login.py
...
|--test_datas
|--login_data.py
|--pytest.ini
|--main.py
|--README.md
|--requirements.txt

准备工作

挂载报告目录

与上篇相同。略

模拟器设置

与上篇相同。略

启动服务

docker, appium_2, 连接模拟器与上篇相同。略
这里讲一下​​​socketserver.py​​​,将它下载好分别放在两个worker的/opt目录下,然后运行​​python3 socketserver.py​​​使用pytest-xdist实现分布式APP自动化测试:基于socket_centos

同步运行

同步方式

这种同步方式又和SSH不同了,因为它没法指定目录,当你的worker在什么目录时,它就将pyexecnetcache放在哪个目录下
比如一开始我们的worker在/opt目录下,使用同步并运行的命令

pytest -d --tx socket=192.168.0.126:8888 --tx socket=192.168.0.136:8888 --rsyncdir ./APP_Xdist_AutoTest

master
使用pytest-xdist实现分布式APP自动化测试:基于socket_html_02
worker1
使用pytest-xdist实现分布式APP自动化测试:基于socket_python_03
worker2
使用pytest-xdist实现分布式APP自动化测试:基于socket_python_04
然后试着将worker所在位置切换到根目录。注意这里你要运行socketserver.py只能使用​​​python3 /opt/socketserver.py​​​(这里只是举个例子,要运行时肯定是要切到/opt目录下,因为我们的挂载点路径是/opt/pyexecnetcache/APP_Xdist_AutoTest/allure_reports)
master
使用pytest-xdist实现分布式APP自动化测试:基于socket_centos_05
worker1
使用pytest-xdist实现分布式APP自动化测试:基于socket_centos_06
worker2
使用pytest-xdist实现分布式APP自动化测试:基于socket_python_07
看到报错,和我们前面解释的一样,是因为项目比较复杂,涉及的依赖多,因此只能通过运行main.py方法来实例化driver,再通过conftest中的fixture传递给页面对象

同步运行

先要修改一下main.py

# main.py
import pytest
import time
from multiprocessing import Pool
from common.clean import *


device_infos = [{"docker_name": "appium_2", "platform_version": "7.1.2", "server_port": 4725}]
cur_time = time.strftime("%Y-%m-%d_%H-%M-%S")

def run_parallel(device_info):
pytest.main([
"-d",
"--tx", "socket=192.168.0.126:8888",
"--tx", "socket=192.168.0.136:8888",
"--rsyncdir", "./",
"APP_Xdist_AutoTest",
f"--cmdopt={device_info}",
#"--junitxml", f"{html_reports_dir}/autotest_report_{cur_time}.xml",
#"--html", f"{html_reports_dir}/autotest_report_{cur_time}.html",
#"--css", f"{html_reports_dir}/assets/style.css",
#"--self-contained-html",
"--alluredir", allure_reports_dir
])


os.system(f"allure generate {allure_reports_dir} -o {allure_reports_dir}/html --clean")


if __name__ == "__main__":
with Pool(1) as pool:
pool.map(run_parallel, device_infos)
pool.close()
pool.join()

然后在各个worker的/opt目录下运行socketserver.py:​​python3 socketserver.py​​​ 最后运行main.py:​​main.py​​ master
使用pytest-xdist实现分布式APP自动化测试:基于socket_html_08

worker1
使用pytest-xdist实现分布式APP自动化测试:基于socket_python_09

worker2
使用pytest-xdist实现分布式APP自动化测试:基于socket_centos_10

报告预览

服务器上导出的报告容易出现样式缺失,因此要将项目放在jenkins上运行,得到在线报告
使用pytest-xdist实现分布式APP自动化测试:基于socket_centos_11


举报

相关推荐

0 条评论