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

前言

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

•新版本升级后,有时会因为代码或部署时配置错误,某个菜单报类似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)

-----------------------------------------------------
注:我这有个学习基地,里面有很多学习资料,感兴趣的+Q群:895817687
-----------------------------------------------------
    [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

(未完待续:代码实现)

猜你喜欢

转载自blog.csdn.net/weixin_42625143/article/details/95055182
今日推荐