本篇文章将描述如何使用 jenkins,selenium,pytest 和 allure 运行自动化测试并且生成 allure 报告
我们知道 selenium 需要使用能够相互兼容的 driver 和 chrome 才能正确工作,不兼容的版本之间会造成各种古怪问题
所以这里我直接使用了 joyzoursky/python-chromedriver:3.7-selenium 镜像作为base,但是这个镜像没有安装 allure
所以用这个镜像作为base我创建了一个自己的镜像 ibaibai/selenium-runner
Jenkinsfile
def label = "mypod-${UUID.randomUUID().toString()}"
podTemplate(label: label, yaml: """
kind: Pod
metadata:
name: selenium-runner
spec:
imagePullSecrets:
- name: regcred
containers:
- name: selenium-runner
image: libaibai/selenium-runner
imagePullPolicy: Always
command:
- /bin/cat
tty: true
volumeMounts:
- name: jenkins-docker-cfg
mountPath: /root
securityContext:
privileged: false
volumes:
- name: jenkins-docker-cfg
projected:
sources:
- secret:
name: regcred
items:
- key: .dockerconfigjson
path: .docker/config.json
"""
) {
node(label) {
stage('Calling selenium') {
sh label: '', script: 'free -m'
timeout(time: 1, unit: 'HOURS'){
dir('workdir') {
git credentialsId: '1b09346a-ac0b-4e71-b9c3-2e73ef43dbc0', url: 'https://lizhe@lizhe.name/autotest.git'
}
}
container(name: 'selenium-runner', shell: '/bin/sh') {
catchError {
sh label: '', script: ' sh -c set +e; pytest /home/jenkins/workspace/testtires/workdir/pytestpoc/hello.py --alluredir allure-results ; set -e'
}
sh label: '', script: ' whoami'
sh label: '', script: ' chmod -R 777 /home/jenkins/workspace/testtires/allure-results'
allure includeProperties: false, jdk: '', results: [[path: 'allure-results']]
}
sh label: '', script: 'free -m'
}
}
}
这个脚本中可控的东西并不多,主要是需要调用
allure includeProperties: false, jdk: ”, results: [[path: ‘allure-results’]]
来生成allure报告, 注意这里 allure 使用的 results 目录是 allure-results
这个目录的声明需要和前面 py 脚本生成的result路径一致
hello.py –alluredir allure-results
hello.py
import allure
import pytest
import os, sys
from selenium import webdriver
import time
@allure.feature('test_module_01')
@allure.story('test_story_01')
def test_case_01():
option = webdriver.ChromeOptions()
option.add_argument("headless")
option.add_argument("--no-sandbox")
driver = webdriver.Chrome(chrome_options=option)
# driver = webdriver.Chrome()
driver.get("https://lizhe.com/?site=abc")
time.sleep(10)
print(driver.title)
driver.get("https://lizhe.com/abc/zh/Root/Tire/c/50000000")
tires = driver.find_elements_by_class_name("product__listing--price")
print(len(tires))
for tire in tires:
print(tire.text)
driver.quit()
assert len(tires) != 0
@allure.feature('test_module_01')
@allure.story('test_story_02')
def test_case_02():
assert 0==1
@allure.feature('test_module_01')
@allure.story('test_story_03')
def test_case_03():
assert 0==0
if __name__ == '__main__':
pytest.main(['-s', '-q', '--alluredir', 'allure-results'])



allure.issues.tracker.pattern
http://tracker.company.com/%s