转 自制快速冒烟测试小工具--基于python多线程

转自https://mp.weixin.qq.com/s?__biz=MjM5OTI2MTQ3OA==&mid=2652182573&idx=1&sn=6e3feea71340b801de47c06188c374ff&chksm=bcdf9c648ba8157212f186bc690d944834c65d6c6d3586e4eb02405de7d4e55a58719bbe84a0&mpshare=1&scene=1&srcid=0705qTZNWdIEckc93qqwoLK2&pass_ticket=9HGjM8KvZn6czOwCRQvqTba%2FIiUOhFDwxzonOvOCkdf%2Fs2uq0DjPXz2UxQEwvK9Q#rd

写在前面

在项目测试的过程中,发现经常会有下面这些情况:


•新版本升级后,有时会因为代码或部署时配置错误,某个菜单报类似404或500的错误;
•为避免以上问题,实施部署人员升级完后,需要手动冒烟一遍所有菜单页面;
•发布当天还有修改提测,来不及再全部手动回归一遍;
•项目周期不长,没有时间来做业务流程的自动化。


如果所有的菜单都通过手动来冒烟一遍的话,我们假定一个菜单页面要5秒,那么如果一个项目有600个菜单页面,那么就需要3000秒,整整一个小时啊,而且是每次升级都要来这么一次。于是我就想,虽然没时间将所有功能都做成自动化,那能不能实现对所有的菜单页面都自动去访问一遍,然后根据访问结果判断是不是都是正常的,以此做个快速的冒烟测试呢?

一、实现步骤分析

想法有了,那就得分析该怎么实现了。最大的问题就在于所有菜单对应的url要怎么获取了,通过各种尝试之后,发现所测项目由于框架原因,无法直接通过爬虫来获取所有的url。

但是在数据库里,对应前后台都有两张表,如eclp_A存放有域名,eclp_B则存有各个菜单页面的具体路径,那么只需要把两张表的数据取出来拼接在一起就成了一个完整的url了。

具体步骤:

(1)在数据库里将客户端和后台管理端(客户端是uc,后台管理端是eclp)域名和路径取出来进行拼接放到一个新表,并加入对应断言关键词;

(2)不同项目的数据库配置不一样,所以把数据库配置放在配置文件,再通过程序获取;

(3)获取到数据库的配置后,连接数据库,从表里获取到所有的url;

(4)取到所有的url之后遍历去request,但是这个需要先登录获取到cookie后做个cookie绑定,那么登录需要用到的用户密码也需要放到配置文件;

(5)遍历访问所有url,并记录其访问结果,成功与失败个数;

(6)在程序执行访问页面时,把成功与失败的日志都记录下来,方便后续查找问题;

(7)因为url可能比较多,访问所有页面会很慢,所以实现多进程或多线程的方式;

(8)将所有页面访问结果利用HTML报告输出;

 

二、前期准备

1. 在数据库(此处是oracle)拼接URL

1.1 创建存放url的表

查看后台存放主域名和路径的表

select t.*,t.rowid from eclp_A t orderby id desc;

select t.*,t.rowid from eclp_B t orderby id desc;

 

创建存放完整url的表

CREATETABLE eclp_uc_url (

ID NUMBER(20) DEFAULT0  NOTNULL ,

SUB_SYSTEM_ID  NUMBER(20) DEFAULT0  NOTNULL ,

SUB_SYSTEM_CODEVARCHAR2(100 BYTE) DEFAULT''  NULL ,

NAME  VARCHAR2(255 BYTE) DEFAULT''  NULL ,

DOMAINVARCHAR2(100 BYTE) DEFAULT''  NULL ,

PATH VARCHAR2(100 BYTE)DEFAULT''  NULL ,

URL  VARCHAR2(100 BYTE) DEFAULT''  NULL ,

ASSERT_WORD  VARCHAR2(255 BYTE) DEFAULT''  NULL

)

创建主键
ALTERTABLE eclp_uc_url ADDPRIMARYKEY (ID);

创建id自增序列

drop SEQUENCE SEQ_ECLP_UC_URL;

CREATE SEQUENCE SEQ_ECLP_UC_URL

INCREMENTBY1

START WITH1

MAXVALUE9999999999999

CYCLE

CACHE 20;

1.2 从两个表分别插入域名和路径到存放url的新表

eclp的路径path插入表

INSERTINTO eclp_uc_url(id,SUB_SYSTEM_ID,NAME,PATH)SELECTSEQ_ECLP_UC_URL.NEXTVAL,SUB_SYSTEM_ID,NAME,URL from eclp_A;

 

eclp的域名domian插入表

updateeclp_uc_url set DOMAIN = (select DOMAIN from eclp_B whereeclp_uc_url.SUB_SYSTEM_ID = eclp_B.id)

whereexists (select 1 from eclp_B where eclp_uc_url.SUB_SYSTEM_ID =eclp_sub_system.id);

 

将domain和path拼接成url

MERGEINTO eclp_uc_url A

USING( select t.id, t.domain || '/' || t.path as urls from eclp_uc_url t) B ON (A.ID= B.ID)

WHENMATCHED THEN UPDATE SET A.URL = B.URLS;

 

2. 数据库配置与前后台用户配置文件

创建一个DbUser.ini文件:
存有数据库连接配置、前后台用户信息、浏览器选择(chrome、firefox、ie)
 
[db]
oracle_ip=127.0.0.1
oracle_account=test_account
oracle_password=test_password

[eclp]
center_url=http://127.0.0.1:8020/system/login.htm
center_account=test01
center_password=123456a
 
[uc]
uc_url=http://127.0.0.1:9001/login.htm
uc_account=test02
uc_password=123456a

[driver]
browser=chrome

3. 前后台登录元素定位方式配置文件

包含用户名、密码、登录按钮的定位方位,UiObjectMap.ini
 
[eclp]
LoginAccount=id>account
LoginPassword=id>password
LoginButton=xpath>//input[@class='btn2']

[uc]
LoginAccount=id>account
LoginPassword=id>password
LoginButton=id>button

 

posted @ 2019-07-07 14:39  feiyueNotes  阅读(372)  评论(0)    收藏  举报