在项目测试的过程中,发现经常会有下面这些情况:
•新版本升级后,有时会因为代码或部署时配置错误,某个菜单报类似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)
SELECT SEQ_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
现在我邀请你进入我们的软件测试学习交流群:【
746506216
】,备注“入群”, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路。
喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!