January 23, 2018
docker + selenium + python 构建前端自动化分布式测试环境。利用seleninum-grid分布式框架,python编写测试代码,docker部署来进行前端自动化测试
2018-2-1 更新 使用docker-compose编排
分布式部署的优点
#
自动化的优缺点就不再重复了,主要分析下docke部署和分布式的优势
- 提高自动化的测试效率(分布式)
- 方便打包和持续集成(docker)
- 解决多人coding,却因为路径不一致导致无法运行的问题(当然也可以通过其他方式来解决~)
这里还有一个问题就是:使用docker部署方式运行测试代码,是看不见本地浏览器启动的,因此在调试测试代码的时候,需要一定的工具来协助,譬如VNC viewer
开篇-selenium
#
大家都知道 Selenium 是支持多种浏览器多个编程语言的一个自动化测试工具。而 Selenium Grid 是一种可以让用户在不同的环境和不同的浏览器上并行运行 web 测试用例的框架。换而言之,使用 Selenium Grid 可以让我们在分布式测试环境下执行测试,例如 Windows,Linux,Mac OS,Andoid/iOS 等等,这样可以大大减少重复的工作量,提高我们的工作效率。
selenium分布式结构如图:
搭建分布式环境
#
在Dockerhub已经具有了相应的selenium的镜像,我们直接使用就行了
拉取镜像
#
docker pull selenium/hub
docker pull selenium/node-chorme-debug
关于node-chrome-debug
和node-chrome
的区别:
暂未研究
运行容器
#
docker run -d -p 4444:4444 --name sel-hub selunium/hub # 运行hub服务
docker run -d -p 5900:5900 --link sel-hub:hub selunium/node-chrome-debug # 运行slenium chrome 节点
# more node could append like node-chrome-debug
查看节点信息
#
在浏览器中打开http://127.0.0.1:4444/grid/console
这里需要注意的是,如果是在本地运行的容器,并映射4444端口,因此得到127.0.0.1:4444,如果是在虚拟机中运行,ip和端口应该根据网络来获取相应的IP和PORT
...
January 16, 2018
wrk 压力测试工具的简单小结。
项目地址:https://github.com/wg/wrk
安装
#
Win: https://github.com/wg/wrk/wiki/Installing-wrk-on-Windows-10
Linux: https://github.com/wg/wrk/wiki/Installing-wrk-on-Linux
MacOS: brew install wrk
基本命令
#
➜ ~ wrk
Usage: wrk <options> <url>
Options:
-c, --connections <N> 连接数
-d, --duration <T> 持续时间
-t, --threads <N> 线程数
-s, --script <S> 制定lua脚本
-H, --header <H> 添加请求头
--latency 打印延迟分布信息
--timeout <T> 设置请求超时
-v, --version 打印版本信息
<N>表示数字参数,支持国际单位 (1k, 1M, 1G)
<T>表示时间参数,支持国际单位 (2s, 2m, 2h)
简单使用及解释
#
wrk -t1 -d20s -c10 -s post.lua http://api.example.com/fake/post
以单线程 保持10个连接 持续20秒 运行post.lua脚本访问http://api.example.com/fake/post
...
January 13, 2018
pytest最常用法总结,当然不止这一点功能。关于更多更强大的插件,可以根据自己需要来定制。
安装
#
pytest 安装和使用都非常简单, 只需pip install pytest
编写测试代码
#
使用pytest,不需要像unittest模块一样,pytest使用的是python自带的assert
,如:
def test_global_function():
assert 1 == 1
使用pytest.mark
#
pytest.mark 用于给测试方法打上标签,在稍后的执行中会讲到如何使用marker
@pytest.mark.marker_self
def test_global_function():
assert 1 == 1
使用pytest.fixture
#
@pytest.fixture
def google_url():
return "http://google.com"
setup 和 teardown
#
setup
和teardown
方法作用范围,分为全局作用,类作用,方法作用
- 全局:作用于全局测试函数
- 类: 作用于自身类
- 类方法: 作用于类函数
简单举例:
#
# 全局
def setup_function(function):
print("setup function global")
def teardown_function(function):
print("teardown function global")
# 类
class Test_fixture:
@classmethod
def setup_class(cls):
print("class setup method")
@classmethod
def teardown_class(cls):
print("class teardown method")
# 类方法
def setup_method(self, method):
print("class method setup function")
def teardown_method(self, method):
print("class method teardown function")
pytest配置文件
#
配置文件名为pytest.ini
setup.cfg
tox.ini
关于配置文件优先级请查阅官方文档
简单举例:
...