使用docker做UI自动化测试

在devops模式下让我们不得不对CICD进行重视,如何在服务容器化的部署方式下引入自动化测试即是关键。

目标:docker+selenium+python完成分布式UI自动化

基本思路:

        ①测试运行的浏览器环境是关键,能支持多线程分布式测试非selenium grid不可,试试开源容器镜像 dosel/zalenium

        ②单独给测试代码做1个容器,使用dockerfile构建成镜像,注意:提前准备私有仓库的基础镜像,基础镜像就包括我们所需的必要依赖

        ③从自动化测试容器里剥离出allure服务,使用开源容器镜像frankescobar/allure-docker-service/ui能更优美的查看allure报告

接下来开工:

1. 在基础镜像上简单编译

构建自动化测试代码的镜像

FROM xxxxxxxxxxx
ADD . autotest
ENV INSTALL_PATH /autotest
WORKDIR $INSTALL_PATH
COPY . .
EXPOSE 8000
RUN pip install -r requirements.txt
CMD ["/bin/bash"]
#CMD python run.py

2. 编写docker-compose.yaml部署浏览器运行环境容器、allure容器、自动化测试容器

# yaml配置
version: '3'
services:
  autotest:
    build: ./
    volumes:
      - ${PWD}/report/allure_result:/autotest/report/allure_reslut
    links:
      - zalenium:zalenium
    depends_on:
      - zalenium
    cap_add:
      - ALL
    entrypoint: >
      /bin/sh -c '
      sleep 6;
      echo "start autotest";
      python run.py;
      '
    container_name: autotest
    stdin_open: true
    tty: true
    privileged: true

  zalenium:
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /tmp/videos:/home/seluser/videos
    ports:
      - 4444:4444
    image:  dosel/zalenium
    container_name: zalenium
    privileged: true
    stdin_open: true
    tty: true
    command:
      - start
  allure:
    image: "frankescobar/allure-docker-service"
    environment:
      CHECK_RESULTS_EVERY_SECONDS: 1
      KEEP_HISTORY: 1
    ports:
      - "5050:5050"
    volumes:
      - ${PWD}/report/allure_result:/app/allure-results
      - ${PWD}/report/allure_html:/app/default-report
    user: root
  allure-ui:
    image: "frankescobar/allure-docker-service-ui"
    environment:
      ALLURE_DOCKER_PUBLIC_API_URL: "http://127.0.0.1:5050"
      ALLURE_DOCKER_PUBLIC_API_URL_PREFIX: ""
    ports:
      - "5252:5252"

3、docker-compose up启动,启动即运行测试代码

........

autotest | E AssertionError: 页面没有找到:验证码登s录 autotest | autotest | base/Basepage.py:107: AssertionError autotest | ------------------------------ Captured log call ------------------------------- autotest | ERROR musen:handle_decorator.py:77 用例--test_verfiycodelogin--描述:验证码登录,错误手机号---断言失败 autotest | DEBUG musen:handle_decorator.py:78 用例信息:{'title': '验证码登录,错误手机号', 'mobile': 'xxxxxxxxx', 'code': 'xxxxxx', 'exp': '验证码登s录'} autotest | INFO musen:handle_decorator.py:79 【预期VS实际】: 页面没有找到:验证码登s录 autotest | testcase/test_login.py ⨯ 100% ██████████ zalenium | 07:14:10.303 [http://172.28.0.7:40001] INFO d.z.e.z.p.DockerSeleniumRemoteProxy - Session bd51363c-7830-44e2-a182-11be08141fa3 completed. Node should shutdown soon... autotest | =========================== short test summary info ============================ autotest | FAILED testcase/test_login.py::TestLogin::test_verfiycodelogin[验证码登录,错误手机号] autotest | autotest | Results (28.11s): autotest | 1 passed autotest | 1 failed autotest | - testcase/test_login.py:24 TestLogin.test_verfiycodelogin[验证码登录,错误手机号] allure_1 | Detecting results changes for PROJECT_ID: default allure_1 | Automatic Execution in Progress for PROJECT_ID: default... allure_1 | Creating history on results directory for PROJECT_ID: default ... allure_1 | Copying history from previous results... allure_1 | Creating executor.json for PROJECT_ID: default allure_1 | Generating report for PROJECT_ID: default autotest exited with code 0

4、查看allure报告----访问localhost:5252

写在最后

还在朝着使用k8s批量执行测试用例学习中~~~

(备注:k8s的视频看起来头大)

 

上一篇:UiAutomator2+Pytest+Allure+PO模型实现Android自动化测试


下一篇:pytest_allure报告乱码