之前弄了一个基于 Python 的 BDD 测试框架 behave 的接口测试,测了 4 个项目,已经用了大半年;
后来又顺便体验了下面 4 点
1.Jenkins CI 持续集成
2.SonarQube 静态扫描
3.写了 Python 项目的单元测试
4.及单元测试覆盖率的统计
期间翻阅了一些资料,捣鼓了几天就成功了,难度还行~快过年了,总结了一下配置步骤分享给大家(文笔不好莫见怪😳~)
脚本编写思路:
-安装 vim 工具
-安装 Python 虚拟环境工具 pyEnv;
-安装 Python 3.7.2 和 2.7
FROM jenkins/jenkins:lts
USER root
RUN apt-get update && apt-get install -y vim
# https://github.com/pyenv/pyenv/wiki
RUN apt-get install -y --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
RUN curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
RUN echo '#!/bin/bash ' > /etc/profile.d/pyenv.sh
RUN echo 'export PYENV_ROOT="$HOME/.pyenv"' >> /etc/profile.d/pyenv.sh
RUN echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> /etc/profile.d/pyenv.sh
RUN echo 'eval "$(pyenv init -)"' >> /etc/profile.d/pyenv.sh
RUN chmod 755 /etc/profile.d/pyenv.sh
# source profile.d/pyenv.sh and install python 3.7.2
RUN . /etc/profile.d/pyenv.sh && pyenv install 3.7.2
docker build jenkins/ -t jenkins/wxp
sudo docker run -d -u 0 -p 8080:8080 -p 50000:50000 --ulimit nofile=4096:8192 -v /Users/grabbywu/jenkins_home:/var/jenkins_home jenkins/wxp
allure jenkin plugin
#!/bin/sh
# 1.第一个参数为 环境 env 第二个参数 需要执行的features 列表
if [ ! -n $1 ]&&[ ! -n $2 ];then
echo "please input env and features"
exit 1
fi
# https://www.cnblogs.com/han-1034683568/p/7211392.html
# bash [[ ]] ==
# sh [] =
# 2.当前目录切换python 环境,如果在本地调试,不需要这一步
. /etc/profile.d/pyenv.sh
python --version
pyenv local 3.7.2
python --version
# 3.导入环境变量
if [ "$1" = "test" ]; then
export TestEnv='test'
elif [ "$1" = "uat" ]; then
export TestEnv='uat'
else
echo "please input test or uat"
exit 1
fi
# 4.移除旧的报告文件夹
if [ -d allure_results ]; then
rm -rf allure_results
fi
# 5.运行测试
j=1
for i in $@
do
echo $i
# 变量名和等号之间不能有空格
# int值比较用-eq 大于-gt
if [ $j -eq 2 ]||[ $j -gt 2 ]; then
{
behave -f allure_behave.formatter:AllureFormatter -o allure_results $i --tags=$1
}||{
echo "execute error!"
exit 1
}
fi
j=$(($j+1))
done
node {
stage('Git CheckOut') { // for display purposes
# 这里填成自己的git地址
git credentialsId: '038dd26b-e3eb-4175-af22-6213a1759425', url: 'http://gitlab.XXX.com/XXX/rest-api-bdd.git'
}
stage('Preparation') {
sh '''#!/bin/bash
. /etc/profile.d/pyenv.sh
python --version
pyenv local 3.7.2
python --version
if [[ -f requirements.txt ]]; then
pip install -r requirements.txt
fi
'''
}
stage('Run TEST') {
sh '''
echo ${TestEnv}
echo ${features}
sh jenkins/run.sh ${TestEnv} ${features}
'''
}
stage('allure Report') {
allure includeProperties: false, jdk: '', results: [[path: 'allure_results']]
}
}
![](/uploads/photo/2019/c098ca95-4eab-451f-8433-6be05da82936.png! large
系统设置>执行脚本
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')
解决方法 1:
统一解释器注释为 #!/bin/sh 或 #!/bin/bash
解决方法 2:
知道 sh 与 bash 的语法区别,如 比较 赋值
PS.最好,在代码中进行时区设置;不用受服务器时区影响
解决办法:
{
behave -f allure_behave.formatter:AllureFormatter -o allure_results $i --tags=$1
}||{
echo "execute error!"
exit 1
}
测试: