上篇介绍了如果在openshift上部署zalenium及python对应用功能进行测试的方法
该篇介绍如何通过Jenkins的Slave容器配合上篇中的zalenium实现自动化功能测试,并生成测试报告。虽然只是一个小例子,但是麻雀虽小,五脏俱全。同时所有的操作及工具都建立在Openshift上。
下图为各工具之间的关系:
jenkins+zalenium+HtmlReporter

###具体操作:

    1. 启动Jenkins需要添加环境变量
      JENKINS_JAVA_OVERRIDES => -Dhudson.model.DirectoryBrowserSupport.CSP=
      该环境变量使得HtmlReporter页面展示正常
    1. 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/

添加Jenkins Slave模板.PNG

    1. 代码中添加自动化测试脚本
      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. Jenkins Job中完成部署后,执行测试脚本
      1
      2
      cd tests
      python test_urls.py
      测试执行操作.PNG
    1. 导出自动测试报表

构建后操作.PNG

    1. 最后结果展示

Reporter报告展示.PNG