上篇介绍了如果在openshift上部署zalenium及python对应用功能进行测试的方法 。 该篇介绍如何通过Jenkins的Slave容器配合上篇中的zalenium实现自动化功能测试,并生成测试报告 。虽然只是一个小例子,但是麻雀虽小,五脏俱全。同时所有的操作及工具都建立在Openshift上。 下图为各工具之间的关系:
###具体操作:
启动Jenkins需要添加环境变量JENKINS_JAVA_OVERRIDES => -Dhudson.model.DirectoryBrowserSupport.CSP= 该环境变量使得HtmlReporter页面展示正常
Jenkins系统管理->系统设置中创建新的Kubernetes Pod Template 基础镜像jenkins-slave-python-centos7:3.10,Dockerfile安装需要的python依赖包
1 2 3 # Dockerfile FROM informaticsmatters/jenkins-slave-python-centos7 RUN pip install selenium -i https://pypi.douban.com/simple/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 # -*- coding: utf-8 -*- import unittest from selenium import webdriver from selenium.webdriver.remote.remote_connection import RemoteConnection from HTMLTestRunner import HTMLTestRunner class SeleniumTestCase(unittest.TestCase): def setUp(self): remoteconnection = RemoteConnection('http://zalenium.example.com/wd/hub', keep_alive=False, resolve_ip=False) self.driver = webdriver.Remote(command_executor=remoteconnection, desired_capabilities={ 'browserName': "chrome", 'video': 'True', 'platform': 'LINUX', 'platformName': 'LINUX' }) self.driver.implicitly_wait(30) self.driver.maximize_window() def test_login_test_case(self): self.driver.get("https://devpf.example.com") username_input = self.driver.find_element_by_id('username') password_input = self.driver.find_element_by_id('password') login_button = self.driver.find_element_by_id('login_btn') username_input.clear() username_input.send_keys('panxiaohua') password_input.clear() password_input.send_keys('12345678') login_button.click() assert not None is self.driver.find_element_by_id('content'), 'Error Happends' def tearDown(self): self.driver.quit() if __name__ == '__main__': suite = unittest.TestSuite() suite.addTest(unittest.TestLoader().loadTestsFromTestCase(SeleniumTestCase)) with open('report.html', 'w') as f: runner = HTMLTestRunner(stream=f, title='Test Report', verbosity=2) runner.run(suite)
1 2 cd tests python test_urls.py