公司使用python+selenium+pytest来做UI自动化测试,我经历了从0开始搭建自动化工程、开发测试报告web服务、编写测试用例,经过了一段时间的磨合,感觉已经比较顺手了,这里梳理下我采用的自动化工程目录组织结构。

整体目录结构及说明

整个目录结构如下,其中第一级目录和文件有:

  • conf目录:主要用来存放项目运行环境、执行环境相关的配置参数

  • logic目录:与项目有关的关键字、业务逻辑封装放到此目录

  • testsuite目录:测试用例在此目录编写,pytest默认约定test开头的文件和方法为测试用例,不满足条件的不会被执行,内部建议按照特性建立文件夹对测试用例进行分类

  • utils目录:把与业务无关的实用程序放到此目录,比如自己写的辅助方法

  • .gitignore文件:git提交忽略文件配置文件

  • conftest.py文件:pytest的fixture方法可以写在这里,测试用例使用其中的fixture不需要使用import显示引入,不过目前我没有使用这个文件

  • pytest.ini文件:可以针对pytest进行一些配置,如日志格式和级别等,后面会展示其配置内容

  • requirements.txt文件:把需要安装的python第三方库写入此文件,需要使用该工程时只需要执行pip install -r requirements.txt就可以一次性全部依赖

  • runall.py文件:执行全部用例入口,主要用来给jenkins等CI/CD工具拉起自动化任务使用,后面会展示其内容

  • README.md文件:自动化工程说明文档

  1. project_name

  2. conf

  3. settings.py

  4. logic

  5. __init__.py

  6. logic.py

  7. mysql.py

  8. testsuite

  9. feature01

  10. test_feature01.py

  11. feature02

  12. test_feature02.py

  13. utils

  14. utils.py

  15. .gitignore

  16. conftest.py

  17. pytest.ini

  18. requirements.txt

  19. runall.py

  20. README.md

AI助手

目录组织示例

pytest.ini配置

下面的配置主要是针对日志格式和级别进行了设置,log_cli开头的配置是针对控制台输出设置的,log_file开头的是针对输出到日志文件来设置的,会生成run.log日志文件,在./log目录下,如果log目录不存在会自动创建。

  1. [pytest]

  2. log_cli = 1

  3. log_cli_level = INFO

  4. log_cli_date_format = %Y-%m-%d-%H-%M-%S

  5. log_cli_format = %(asctime)s - %(filename)s - %(module)s - %(funcName)s - %(lineno)d - %(levelname)s - %(message)s

  6. log_file = ./log/run.log

  7. log_file_level = INFO

  8. log_file_date_format = %Y-%m-%d-%H-%M-%S

  9. log_file_format = %(asctime)s - %(filename)s - %(module)s - %(funcName)s - %(lineno)d - %(levelname)s - %(message)s

AI助手

requirements.txt

列举依赖的python第三方库,可以指定版本,也可以不指定,不指定的情况下默认安装最新版本。文件示例内容如下,其中selenium、pytest、pytest-html、pytest-xdist是必须的,其他需要根据自己的项目情况来定。

 
  1. xlrd >= 1.2.0

  2. openpyxl >= 3.0.4

  3. requests >= 2.24.0

  4. psutil >= 5.7.2

  5. pymysql >= 0.10.0

  6. selenium

  7. pytest

  8. pytest-html

  9. pytest-repeat

  10. elasticsearch

  11. pyyaml

  12. jsonpath

  13. python-dateutil

  14. paramiko

  15. pytest-xdist

  16. xlwt

  17. pandas

AI助手

runall.py

runall.py文件主要是给jenkins等CI/CD工具拉起自动化任务使用的,它的主要作用就是执行pytest.main方法来使用pytest框架来收集并执行测试用例,最终会生成html和xml两份报告。

  1. import os

  2. import time

  3. import pytest

  4. from conf.settings import *

  5. def new_report_dir():

  6. return time.strftime("%Y-%m-%d")

  7. def new_report_name(project="demo", file_type="html"):

  8. """file_type:文件后缀名,默认为html

  9. """

  10. now = time.strftime("%Y-%m-%d_%H-%M-%S")

  11. report_name = "{2}_{0}.{1}".format(now, file_type, project)

  12. return report_name

  13. if __name__ == "__main__":

  14. report_base_dir = r".\report"

  15. report_html = os.path.join(report_base_dir, new_report_dir(), new_report_name())

  16. report_xml = os.path.join(report_base_dir, new_report_dir(), new_report_name("demo", "xml"))

  17. pytest.main(["--html={0}".format(report_html),

  18. "--junit-xml={0}".format(report_xml),

  19. "-n {0}".format(CPU_NUM),

  20. "--dist=loadfile"])

AI助手

但是,pytest默认生成的html报告并不友好,如果还想把历史数据做下统计分析就需要使用生成的xml报告了。比如通过flask框架可以快速定制开发出web服务,通过持续采集解析xml报告写入数据库作为数据源,不仅能更好地展现单次测试报告的数据,而且还能分析历史数据的统计曲线。

图片

 

 感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

更多推荐