最近在github上看到AutoMagic自动化平台开源了,一时手痒,就试着搭了一套环境,现在把思路和大家说一说。

AutoMagic从其工作分工分两部分:

 1Web端管理平台

管理平台基于Python Django框架+Mysql开发,主要用来管理自动化测试用例和设计自动化测试场景、存放界面元素标识,通过界面录入存放在数据库中进行管理,它是一个纯粹基于Selenium关键字自动化原件管理平台。

2:客户端执行脚本(seleniumkeyword)

AutoMagic的执行效果展示主要靠它来体现,它的执行依附于web平台存储的用例和场景数据,seleniumkeyword可以不需要部署在服务器端,只要它能够连接到服务器端的数据库,部署在任何平台都可以执行。(方便分布式执行测试用例)

2.1:客户端安装运行环境

服务端:基于python,mysql-python,django环境下运行

客户端:基于python、selenium、 mysqldb 环境下运行,其它依赖包和插件根据说明文档要求进行安装。

2.2:客户端目录脚本说明

TestSuite.py 测试用例执行脚本引擎是,它可以通过参数实现不同的执行方式

-t [taskid] 指定执行的AutoMagic任务

-u [userid] 指定执行脚本的用户

-r [runid] 执行测试用例脚本要同步的TestRailRunid,它只有在执行 -t 参数时才会生效。

-c [caseid] 指定要执行的单个用例的编号

-p [projectid] 指定要执行的项目id,会依次执行项目中所有模块和用例状态是启用的所有用例

-b [browser] 指定执行用例过程所使用浏览器,默认使用chrome浏览器,也可在执行case过程中通过openbrowser关键字重置

示例:

python TestSuite.py -t 1 -u tsbc  -b chrome

zhufc用户在谷歌浏览器下启动id为1的测试任务

Base.py 是我们关键字维护脚本,class Action中重定义了python selenium的一些方法,其它部分均为自定义关键字。

AddCase.py 同步用例到TestRail到脚本,并连接平台端的mysql数据库

-t [taskid] 指定执行同步的AutoMagic任务

-u [userid] 指定执行脚本的用户

-s [sctionid] 执行同步case到TestRail的那个用例集(section_id代表所在用例集)

HTMLTestRunner.py 生成报告的脚本文件

RestApiUtil.pyRestApiUtil.py 是发包MW模拟安全事件和发送pcap发包接口

testrail.py TestRail的接口API

result目录为报告接口目录

data目录执行上传附件关键字时,附件存放目录

目录结构:

生成测试报告效果:

二:部署方案

方案一 传统部署

1:服务器端部署

我是ubuntu环境,如果是centos环境,命令需要稍微调整、apt-get命令改成yum

1.1:安装mysql服务

  apt-get install mysql-server

  apt-get isntall mysql-client

  sudo apt-get install libmysqlclient-dev

  netstat -tap | grep mysql检查是否安装成功

  mysql –uroot –pXXX 执行登录

1.1:生成基础安装包

在usr目录下新建python文件夹 :

  cd /usr

  mkdir python

  apt-get update

  apt-get install lrzsz

执行rz命令,将本地压缩包拖到python文件夹下

在主目录下执行 python setup.py sdist 生成安装包

  cd dist

  pip install automagic-0.1.tar.gz执行安装

1.2:安装 django 依赖包

apt-get install python-dev  python基础依赖包

apt-get install python-pip  安装pip

pip install -U setuptools 升级setuptools

pip install django==1.11.1 安装基础diango

pip install MySQL-Python==1.2.3  安装mysql-python

    pip install django-users2==0.2.1 依赖包

pip install django-cors-headers==2.0.2 依赖包

pip install djangorestframework==3.6.3 依赖包

pip install python-jenkins==0.4.14 依赖包

1.3:安装seleniumkeyword依赖包

pip install selenium 依赖包

pip install requests 依赖包

pip install paramiko==2.1.2  依赖包

pip install scapy==2.3.3  依赖包

1.4:异常处理

如果在apt-get install过程中出现404,那么执行apt-get update进行源升级

如果进程中出现E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?那么查看apt-get 进程,全部杀掉

  ps -A | grep apt

  sudo kill -9 XXX

进程中报mysql—config和libmysqlclient.so.18无法定位到,那么配置软链接

ln -s /usr/local/mysql/bin/mysql_config /usr/local/bin/mysql_config 

ln-s/usr/local/mysql/lib/libmysqlclient.so.18/usr/lib/libmysqlclient.so.18

1:5:配置mysql连接

Cd /usr/python/automagic-dev/automated

    Vi setting.py

修改数据库配置文件

Ps:这里的NAME是表名,需要在数据库中真实存在

1.6:mysql用户组ip分配

/usr/local/mysql/bin/mysql -uroot -pXXXXX

grant all privileges  on *.* to root@'%' identified by "XXXXX";

FLUSH PRIVILEGES;

1.7:数据库初始化

cd automagic-dev

python manage.py makemigrations

    python manage.py migrate

1.8:创建管理员

python manage.py createsuperuser

  按照提示进行输入要创建的用户名、邮箱、密码(8位以上,字母、字符、数字的组合)

1.9:启动服务

  python manage.py runserver 0.0.0.0:8080

  虚拟机执行:本机host:8080 访问平台

2:pc端部署

2.1:安装python2.7
2.2:安装setuptooles
2.3:pip install selenium
2.4:pip install  MySQL_python‑1.2.5‑cp27‑none‑win_amd64.whl
  2.5:pip install mysql-python
  2.6:配置mysqldb

方案二 docker环境部署

Automagic平台我已经进行了容器化,因此只需要在本地安装docker工具,即可下载镜像部署

1:服务器下安装docker

  sudo apt-get update

  sudo apt-get install docker

2:下载镜像(镜像暂未公开,需要的加群获取)

  registry.cn-hangzhou.aliyuncs.com/zhufc/automagic:django-automagic

3:基于镜像构建容器

  docker run -d --name automagic -p 4406:3306 -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/zhufc/automagic:django-automagic

  3306数据库端口映射到4406;8080容器端口映射到虚拟机8080上,让外部访问

4:进入容器

  Docker ps –a 查看容器id

  Docker exec –it d39c6648ebb0 bash 进入容器内部

5:进入automagic目录下启动自动化平台

  Cd /usr/python/automagic-dev

  Python manage.py runserver 0.0.0.0:8080 启动服务

出现端口正在使用,表示服务已经伴随容器自启动了,直接去平台用虚拟机ip访问即可

执行 ctrl+p+q ,退出但不停止容器

查看虚拟机ipifconfig

6:页面执行 localhost:8080启动服务。

7:注意事项

我的docker容器下已经部署了mysql服务并配置了跟随容器自启动,无需重启mysql。

三:平台基本使用

1:创建产品

2:点击产品名称,创建项目

3:点击项目名称创建模块

4:点击用户管理下的关联产品,将产品与用户挂钩

5:功能测试下添加关键词

关键词来源在seleniumkeyword下,也可以重定义。

6:添加用例,填写关键词,定位元素或者输入文本

7:填写定位方式和定位标识

8:创建任务,勾选用例

9:seleniumkeyword目录下执行脚本命令 ,注意任务编号

python TestSuite.py -t 2 -u zhufc -b chrome  意思是在谷歌浏览器下执行任务编号2

10:查看运行结果

11:在用例下查看详情可以看到详细的运行过程和debug日志

12:在result目录下可以查看详细的运行报告和日志文件

注:部署过程中会涉及到一些第三方包和异常的处理,如果有需要帮助的请联系我!

AutoMagic-开源自动化平台构建思路的更多相关文章

  1. 我发起了一个 用 物理服务器 和 .Net 平台 构建云平台 的 .Net 开源项目

    大家好 , 我发起了一个 用 物理服务器 和 .Net 平台 构建云平台 的 .Net 开源项目 . 对 , 用 物理服务器 和 .Net 平台 构建 云平台 . 通过 .Net 构建 分布式 计算集 ...

  2. 开源运维自动化平台-opendevops

    开源运维自动化平台-opendevops 简介 官网 | Github|  在线体验 CODO是一款为用户提供企业多混合云.自动化运维.完全开源的云管理平台. CODO前端基于Vue iview开发. ...

  3. TurtleBot 3 & 2i ROS开源实验平台

    TurtleBot 3 & 2i ROS开源实验平台,全球更受欢迎的ROS平台. TurtleBot是ROS标准平台机器人,在全球开发人员和学生中深受欢迎.其有3个版本: TurtleBot1 ...

  4. Unity跨平台C/CPP动态库编译---可靠UDP网络库kcp基于CMake的各平台构建实践

    1.为什么需要动态库 a)提供原生代码(native code)的支持,也叫原生插件,但是我实践的是c/cpp跨平台动态库,这里不具体涉及安卓平台java库和ios平台的objectc库构建. b)某 ...

  5. 【物联网】 9个顶级开发IoT项目的开源物联网平台(转)

    物联网(IoT)是帮助人工智能(AI)以更好的方式控制和理解事物的未来技术. 我们收集了一些最有名的物联网平台,帮助您以受控方式开发物联网项目. 物联网平台是帮助设置和管理互联网连接设备的组件套件. ...

  6. 9个顶级开发IoT项目的开源物联网平台

    https://blog.csdn.net/shnbiot/article/details/80432017 物联网(IoT)是帮助人工智能(AI)以更好的方式控制和理解事物的未来技术. 我们收集了一 ...

  7. flynn 开源paas 平台安装试用

    flynn 是一个不错的开源paas 平台,基于git 以及容器技术,开发模型与 heroku 基本一样,同时构建方式就是基于heroku 的buildpacks 安装 官方文档提示说明是ubuntu ...

  8. Unity3D跨平台动态库编译---记kcp基于CMake的各平台构建实践

    一 为什么需要动态库 1)提供原生代码(native code)的支持,也叫原生插件,但是我实践的是c/cpp跨平台动态库,这里不具体涉及安卓平台java库和ios平台的objectc库构建. 2)某 ...

  9. 开源映射平台Mapzen加入了Linux基金会的项目

    2019年1月29日,Linux基金会宣布,开源映射平台Mapzen现在是Linux基金会项目的一部分. Mapzen专注于地图显示的核心组件,如搜索和导航.它为开发人员提供了易于访问的开放软件和数据 ...

随机推荐

  1. WPF项目学习.四

    信息收录项目 版权声明:本文为博主初学经验,未经博主允许不得转载. 一.前言 记录在学习与制作WPF过程中遇到的解决方案.  需求文案.设计思路.简要数据库结构.简要流程图和明细代码,动图细化每步操作 ...

  2. POJ-2253 Frogger---最短路变形&&最大边的最小值

    题目链接: https://vjudge.net/problem/POJ-2253 题目大意: 青蛙A想访问青蛙B,必须跳着石头过去,不幸的是,B所在的石头太远了,需要借助其他的石头,求从A到B的路径 ...

  3. __init__特殊方法

    __init__特殊方法不应当返回除了none以外的任何方法.

  4. LabelFrame

    LabelFrame组件是Frame组件的变体. 默认情况下,LabelFrame会在其子组件的周围绘制一个边框以及一个标题. 何时使用LabelFrame组件?当你想要奖一些相关的组件分为一组的时候 ...

  5. Javascript之Event Loop

    先看段代码: console.log(1); setTimeout(function () { console.log(2); new Promise(function (resolve, rejec ...

  6. 最新的Windows环境搭建zeroMQ并使用java代码运行zeromq详细教程

    最近项目要用zeromq,linux上很好配置使用,但是windows上配置与使用没有找到合适的解决方案,看的很头疼,这里自己总结下供大家参考 准备工作: 1.libzmq下载地址:https://g ...

  7. [LeetCode] Sentence Similarity II 句子相似度之二

    Given two sentences words1, words2 (each represented as an array of strings), and a list of similar ...

  8. [LeetCode] Longest Uncommon Subsequence II 最长非共同子序列之二

    Given a list of strings, you need to find the longest uncommon subsequence among them. The longest u ...

  9. javaApplication中如何使用log4j

  10. shell实现脚本监控服务器及web应用

    实际工作中我们需要知道部署在服务器上的应用有没有问题,但是人为的操作太麻烦有咩有简单的方式呢shell来监控我们服务器运行状态以及服务器上部署的应用,如果出现异常就会自动发送一个邮件给我们,开始搞起. ...