参考文档:
1、Selenium自动化测试Python一:Selenium入门
2、Web自动化测试:超详细的环境搭建步骤
3、「UI 测试自动化selenium」汇总-虫师
4、unittest 生成 HTMLTestRunner 测试报告
测试范围的确定原则:
1、稳定的需求点、变动较少的页面
2、比较频繁的回归测试
3、需要在多平台上运行的相同测试案例、组合遍历型的测试、大量的重复任务
系统测试范围:
1、主要功能模块及页面加载
2、页面中图表、数据表中的数据验证
A、验证数据规则
B、加载时间验证
系统测试用例覆盖率要求:
一般的要求 50% +
重点的要求 80% +
根据项目的具体要求,变动特别大的项目需要额外单独考虑覆盖率
团队建设:
根据项目实际,UI自动化测试工作需要3-4名测试工程师协同工作。首先实现自动化用例的维护和执行。在这个基础上不断的抽取实现公共模块的设计以及测试报告的生成等工作。
技术方案:
selenium webdriver +Python(Unittest)/Java(TestNG)
选择Python + Selenium 的技术方案
Selenium的WebDriver是开源工具。利用比较简洁的Python语言进行自动化测试,对于人员的学习成本来讲比较实用,学习时间短,有优势。
Python自带的unittest单元测试框架可以很方便的实现自动化用例的设计和执行以及自动化用例套件的管理等任务。Python是纯面向对象的语言,后续也可以过渡到Java + Selenium进行更加丰富的自动化测试。
此外,可以选择Jenkins作为持续集成服务器,配合Python+Selenium的方案进行自动化冒烟测试。
另外,项目已经搭建好Python(Unittest)+Selenium的测试框架,可以直接使用。
目前为止,主要功能模块和主要页面的自动化测试脚本已经基本完成,以下主要阐述对页面数据验证的思路和方案。
数据验证的思路和方案:
1、验证数据的字符类型是否正确
a、分析系统中每个页面中不同指标的数据类型(如:日历模块中,建议售价为整型,预测收入为浮点型)
b、对相应数据类型进行验证(利用type函数判断)
import types type(x) is types.IntType # 判断是否int 类型 type(x) is types.StringType #是否string类型
2、验证数据的特殊规则
a、分析系统中含有特殊规则的数据指标(如:预测数据不能为空;预测间夜量不能超过可卖房数;预测出租率不能超过100%等)
b、通过JS获取元素中的值并赋值给变量A
c、比较变量A与规则值的大小
#情况1:直接写在标签中的 A = find_element_by_name("payOrderCode").textif (A<137) :print "验证成功"elseprint "验证失败"
#情况2:js动态生成的数据A = driver.execute_script("return Jquery('[name=commission]').val():")if (A<137) :print "验证成功"elseprint "验证失败"
3、验证数据的一致性
a、分析系统中同一数据在不同页面的分布情况(如:6.27日在同等规则下首页数据表中的预测间夜量为97,在预测管理页面预测间夜量也为97,在报表中也为97)
b、找出这些数据复制给变量
c、查看这些数据是否一致
A = find_element_by_name("payOrderCode").textB = find_element_by_name("payOrderCode1").textC = find_element_by_name("payOrderCode2").textassertEquals( A, B,C);
4、验证汇总值的计算是否正确
a、分析系统各数据表的汇总规则(如:财务预测报表的汇总栏)
b、计算各个数据相加的和是否与汇总数据一致
A = find_element_by_name("payOrderCode").textB = find_element_by_name("payOrderCode1").textC = find_element_by_name("payOrderCode2").textassertEquals( A+B,C);
5、验证比较值的准确性
a、分析系统各数据表的比较规则(如:预测变化报表的变化栏)
b、计算各个数据的差值、差异率是否与表显数据一致
A = find_element_by_name("payOrderCode").textB = find_element_by_name("payOrderCode1").textC = find_element_by_name("payOrderCode2").textassertEquals( A-B,C);A = find_element_by_name("payOrderCode").textB = find_element_by_name("payOrderCode1").textC = find_element_by_name("payOrderCode2").textassertEquals( (A-B)/B,C);
6、验证元素加载时间
#元素开始查找startime=datetime.datetime.now()#元素结束查找endtime=datetime.datetime.now()#加载时间loadtime=(endtime-starttime).seconds
#自定义方法def performance_element_loadtime(driver,expect,element): starttime=datetime.datetime.now() print u'开始时间是%s' %starttime for i in range(4000): text1=driver.find_element_by_xpath(element).text if expect in text1: endtime=datetime.datetime.now() print u'结束时间是%s'%endtime loadtime=(endtime-starttime).seconds print u'元素加载成功时间为:',loadtime #print(i) break if i>2500: endtime=datetime.datetime.now() print endtime,text1 loadtime=(endtime-starttime).seconds print u'元素加载失败时间为:',loadtime break
对于数据验证的思路和方案我基本想到了这么多,下面是我对目前UI自动化测试工作的一些建议:
1、对测试用例进行分组。在Java+TestNG框架中可以利用@Test(groups=”group1”)对测试用例进行分组,可以在测试套件中设置只执行哪一组的测试用例,可以提高测试执行的灵活性。Python+Unittest框架应该也有类似功能,建议使用。
2、测试报告HTMLTestRunner。Python+Unittest和Java+TestNG都支持import HTMLTestRunner,测试报告的使用可以将测试工作文档化,提供日后优化或总结的依据
软件测试技术交流群:439198493
网友评论