Appium 好看的自动化测试报告,平台版本

文贤平 · 2018年07月26日 · 最后由 淳罡 回复于 2018年12月07日 · 1478 次阅读

aotu_ui 是一个集成自动化测试报告 Python 开发 web 版本,他不仅有这个漂亮的外观,还有强大的功能,集成了 ui,接口测试报告,使用简单,快速上手

项目地址,觉得好用的帮忙点个小✨✨

项目依赖

  • Python 版本 2.7.10-2.7.14
  • django 版本 1.11 以上
  • redis 最新版本(可以不安装)
  • djangorestframework 3.8.2 以上
  • mysql 5.7

项目开始

  • 安装依赖,项目根目录执行命令 pip install -r requirements.txt
  • mysql 建表,并设置为 utf-8 create database auto_ui DEFAULT CHARACTER set utf8;
  • 根目录创建执行合表,全部 ok 表示成功 python manage.py migrate
  • 建连接 db 的配置文件

    # config_auto_ui.yaml
    ---
    db:
    ip: localhost
    port: 3306
    table: auto_ui
    uname: root
    passwd: 123456
    
    
  • 设置文件访问路径 auto_ui--Config.py 文件修改路径

    if platform.system() == "Windows":
        path = os.path.join('d:\config_auto_ui.yaml')
    else:
        path = os.path.join('/usr/local/aotuConfig/config_auto_ui.yaml')
    f = open(path)
    s = yaml.load(f)
    f.close()
    return s
    
  • 启动 auto_ui, 允许外网访问

    python manage.py runserver 0.0.0.0:8000
    

    如何对接 appium 或者接口测试结果报告

  • 先来看看数据库的字段, 只要在每条用例跑完后将对应字段结果入库即可,
    需注意是 ReportDetail 和 ReportInfo 为 uuid 关联,每次运行跑脚本需要生成一个全局的 uuid

    global uuid
    uuid = uuid.uuid1()  # 生成全局唯一id
    
    # ReportDetail 对应字段
    precondition = models.CharField("前置条件", max_length=255, default=None)
    case_name = models.CharField("case名称", max_length=128, default=None)
    check_step = models.CharField("检查步骤", max_length=128, default=None)
    title = models.CharField("用例标题", max_length=64, default=None)
    step = models.TextField("测试步骤", max_length=2048, default=None)
    phone_name = models.CharField("机型", max_length=64, default=None)
    result = models.ImageField("测试结果", default=0)
    screenshots_path = models.ImageField("测试图片,传入图片路径即可", upload_to='upload', default=None)
    msg = models.TextField("失败原因", max_length=1024, default=None)
    case_id = models.CharField("case_id", max_length=64, default=None)
    report_uuid = models.CharField("每次运行唯一md5标识", max_length=256, default=None)
    report_create_time = models.DateTimeField("创建时间", auto_now=False, auto_now_add=True)
    report_update_time = models.DateTimeField("更新时间", auto_now=True, auto_now_add=False)
    platform_name = models.TextField("系统类型", max_length=16, default="android")
    case_step_time = models.TextField("测试步长,json格式", max_length=2048, default=None)
    
    # ReportInfo 对应字段
    case_sum = models.IntegerField("case总和", default=0)
    case_pass_sum = models.IntegerField("通过case总和", default=0)
    case_fail_sum = models.IntegerField("失败case总和",  default=0)
    case_date = models.DateTimeField("测试日期", auto_now=False, auto_now_add=True)
    case_run_time = models.CharField("测试总耗时", max_length=64, default="0")
    platform_name = models.TextField("系统类型", max_length=16, default="android")
    platform_env = models.TextField("运行环境", max_length=16, default="stage")
    report_uuid = models.CharField("每次运行唯一md5标识", max_length=256, default=None)
    report_info_create_time = models.DateTimeField("创建时间", auto_now=False, auto_now_add=True)
    report_info_update_time = models.DateTimeField("更新时间", auto_now=True, auto_now_add=False)
    

    功能

  • 所有的自动化统计报表,囊括所有的脚本运行的历史数据和进 7 天的脚本成功率趋势

  • 单次自动化统计报表,统计了单次运行脚本的详细信息,分为失败统计和全部统计和日志复盘信息

  • 单条自动化统计报表,单条用例的详细信息,包括检查点,执行步骤,

共收到 41 条回复 时间 点赞

很不错啊~,报告也很漂亮。跟 appium 测试如何结合的有案例吗?

报告很好看,但跟楼上有同一个问题,这个项目怎样放到 appium 的测试项目里呢?或者说这个项目的功能仅仅是展示报告还是说跟 HTMLTestRunner 一样的功能呢?

不错不错 adbui 终于有更新了

你这个是做了 UI 自动化的平台吗

能把 auto 拼成 aotu 的……

槽神 回复

已全部修改了好了

pan 回复

目前只上了一个测试报告版块,其他的版块有还没有剥离敏感功能,过段时间会开源,和 HTMLTestRunner 区别是这个是可追溯,有历史数据,可扩展性强。

枫叶 回复

嗯,已经是平台化了,这个开源了一部分

雨夜狂奔 回复

已经更新对接方法😃

文贤平 回复

很不错的平台,我也在研究,期待完全开源😎

文贤平 回复

期待开源呀,我目前也在整移动端 UI 自动化平台的一些东西,不过遇到一些问题不知道怎么处理,不知道能不能加个 QQ 咨询咨询😆

很不错哦,很漂亮

来年的规划也有这个 Report Center, 但是我们期望是多个项目的 Report 一个平台展示。

米阳MeYoung 回复

测试报告统一放到一个平台感觉还是有必要的,便于展示,能直观部门的绩效和成果,以及所有的问题统计(包括脚本的稳定性),目前我们还只有 ui 和 interface 的,后续考虑会将我厂的代码构建和 sonar 一起集成进来😃

很赞

文贤平 回复

对的。 我们也是这么打算。 所以叫 Report Center 。 这里就涉及三大块,1 如何在尽可能不修改源码的情况下生成你需要的 Report 数据。 2. 如何把各个平台的数据实时收集 3. 就是解析展示了。

mark,目前在用 Java 做一套类型的自动化平台,还在进行中。期待楼主的项目早日脱敏完全开源,学习下思路。

仅楼主可见

报告挺漂亮的,不考虑兼容 Python3 吗?

python2 就要淘汰了,怎么还不兼容 Python3

那接口数据举例子吧,比如有串接口 a,d,b,假设对应的时长为 1,2,3,那么存入的 json 格式就是{"a":1, "b":2,"c":3}

iBatigoal 回复

还在用 2 的人瑟瑟发抖,python3 应该也可,里面没啥语法冲突的

根目录创建执行合表,全部 ok 表示成功 python manage.py migrate
这里的根目录指的是哪个?当前用户的根目录?

Aliguagua 回复

日志截全一点,关键的没截取到,根目录就是你 clone 项目进去的目录

wenxianpingdeMacBook-Pro:auto_ui wenxianping$ ls
README.md       manage.py       setting
auto_ui         report          uml
home            requirements.txt
41楼 已删除
文贤平 回复

命令行运行 python manage.py migrate 出错。错误提示如上面截图

Aliguagua 回复
# config_auto_ui.yaml
---
db:
ip: localhost
port: 3306
table: auto_ui
uname: root
passwd: 123456

这个配置文件的名字注意一下,和这里面的一样

文贤平 回复

/usr/local/autoConfig/config_auto_ui.yaml
下面查看 config_auto_ui.yaml 的内容

Aliguagua 回复

你调试一下,y 的值应该是 nulll,才报这个错,看看是不是没读到这个配置文件

哥们 我自己写一个这样子平台出来大概要多久啊?

wtnhz 回复

兄 die,这个不好说了,你自己应该知道要多久的,我又不知道你技术功底和思路什么,没法说

你好,我项目启动后,打开连接提示这个,这个要配置 redies 吗

我把 settings 的缓存注释掉了,嘻嘻

数据量不大的时候是用不着这个缓存的,注释不影响哈

报表是用哪个模板的哇,这个是 adminLTE 吗

程明远 回复

应该不是

想问几下,case 运行情况的柱状图,数据怎么渲染的,貌似不是模板写法了

淳罡 回复

路径:/report/views.py

路径:auto_ui/home/static/build/js/custom.js

很细心的一个小伙子,其实是 django 里面写了个接口,然后用 js 去调这个接口拿数据,然后再由 js 去渲染的

文贤平 回复

好的,谢了,找到了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册