背景
在实际的测试业务中,我们往往会遇到测试用例执行时间比较长,大量的测试用例串行执行的话,会使的整个测试周期变长,导致不能及时的反馈自动化测试的结果。因此我们会想出几种解决方案,来并行的执行测试用例,加快自动化测试时间。做到能够及时的反馈测试结果。
设计方案
方案一:
测试用例分布式执行,通过策略,将不同的测试用例,分发到不同的测试机上进行执行,然后收集测试结果,合并测试报告。
这里我们以web测试为例:
test-arch-robot.png通过Hub节点中心,将不同的测试请求分发到合适的测试节点中去,实现测试的分布式执行。
方案二:
在同一台测试机上,启动不同的进程,来分别执行不同的测试用例,根据测试机的CPU核数确定启动的进程数,实现真正的并行执行。
这里我们主要用到了开源工具pabot来实现robot测试用例的并行执行。
robot_pabot.jpg样例
执行下面这个简单的用例,了解并行执行过程。
pip install -U robotframework-pabot==0.35
git clone https://github.com/wywincl/example-for-pabot.git
cd example-for-robot && pabot --processes 5 topsuite
输出
ubuntu2@ubuntu2-PowerEdge-R410:~/tmp/example-for-pabot$ pabot --processes 5 topsuite
2017-01-05 15:48:13.683078 [PID:30072] [3] EXECUTING Topsuite.Testsuite2-测试2
2017-01-05 15:48:13.690442 [PID:30075] [4] EXECUTING Topsuite.Testsuite3
2017-01-05 15:48:13.689776 [PID:30073] [1] EXECUTING Topsuite.2Suite.Testsuite5-测试5
2017-01-05 15:48:13.696798 [PID:30079] [0] EXECUTING Topsuite.2Suite.Testsuite4
2017-01-05 15:48:13.978538 [PID:30077] [2] EXECUTING Topsuite.Testsuite1
2017-01-05 15:48:14.079019 [PID:30077] [2] PASSED Topsuite.Testsuite1 in 0.1 seconds
2017-01-05 15:48:14.089794 [PID:30072] [3] PASSED Topsuite.Testsuite2-测试2 in 0.4 seconds
2017-01-05 15:48:14.091765 [PID:30075] [4] PASSED Topsuite.Testsuite3 in 0.4 seconds
2017-01-05 15:48:14.094498 [PID:30073] [1] PASSED Topsuite.2Suite.Testsuite5-测试5 in 0.4 seconds
2017-01-05 15:48:14.098067 [PID:30079] [0] PASSED Topsuite.2Suite.Testsuite4 in 0.4 seconds
Output: /home/ubuntu2/tmp/example-for-pabot/output.xml
Log: /home/ubuntu2/tmp/example-for-pabot/log.html
Report: /home/ubuntu2/tmp/example-for-pabot/report.html
Elapsed time: 0 minutes 0.664 seconds
小结
结合Jenkins+docker技术,我们可以很方便的基于上面的两套方案,打造分布式并行自动化测试集群。
备注
Does not Support Other Unicode Character Like Chinese Character. 中文支持问题已经解决了。
网友评论
pabot --processes 10 --outputdir results E:\Python27\Scripts\test\测试用例层\,另外可以加你的qq吗,谢谢
Traceback (most recent call last):
File "D:\Python27\lib\runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "D:\Python27\lib\runpy.py", line 72, in _run_code
exec code in run_globals
File "D:\Python27\lib\site-packages\pabot\pabot.py", line 591, in <module>
main(sys.argv[1:])
File "D:\Python27\lib\site-packages\pabot\pabot.py", line 578, in main
_get_suite_root_name(suite_names)))
File "D:\Python27\lib\site-packages\pabot\pabot.py", line 473, in _report_resu
lts
return _report_results_for_one_run(outs_dir, options, start_time_string, tes
ts_root_name)
File "D:\Python27\lib\site-packages\pabot\pabot.py", line 477, in _report_resu
lts_for_one_run
output_path = _merge_one_run(outs_dir, options, tests_root_name)
File "D:\Python27\lib\site-packages\pabot\pabot.py", line 490, in _merge_one_r
un
options, tests_root_name).save(output_path)
File "D:\Python27\lib\site-packages\pabot\result_merger.py", line 128, in merg
e
assert len(result_files) > 0
AssertionError
谢谢,方便的话可以加我下QQ:344134880吗,因为加你们群没有被通过。