测试数据来源于数据库,采用python+selenium的方式执行UI 自动化,执行完成后将结果存进数据库。实现测试数据与代码分离,方便后续维护。
具体思路是按照task -》 case -》 case step的层级展开:
task中包含一个或多个case_id,case_id包含多个step_id,每个step对应一个element,一个action,input(可以是空)和expected value(可以是空)
在demo_case.py文件中直接
代码路径:https://git.garena.com/jingyun.qi/test/
CommonAction: actionTypeId; typeName; description; actionMethod
CaseTemplate: caseTemplateId; product; description
TestCase: caseId; caseName; caseTemplateId
CaseStep: stepId; stepName; caseId; element; actionTypeId; inputValue; expectedValue; dbConnectionId; dbQuery; description
DbConnection: dbConnectionId, userName, password, portNumber
task: task_id; task_name; test_case_ids; folder; status; executor; exec_settings; exec_summary; exec_start_time; exec_end_time; root_paths; description
execution: exec_id; task_id; test_case_id; status; result_data; start_time; elapsed_time; remark
蓝色字段为主键,自增, 红色字段为唯一索引
element表存放所有页面元素的locator,支持xpath,css,className,id,url。 module指定element归属于哪个project哪个模块,可以是类似rcmd_queue或者rcmd_bundle这样的,表示这个element是recommendation项目中的queue相关页面元素。
CommonAction表存放定义的一些common action,比如open_url,button_action,input_action,dropdown_list等, 以及一些验证结果的方法,get_method(通过获取api的结果验证),verify_content(通过获取某个元素的内容验证)
CaseStep表存放case的每个步骤,一个case包含多个步骤,只需要指定caseId相同即可。具体来说如何添加一个step呢?
至此,一个casestep所需的内容基本齐全,可以将一个case拆分成多个step,按照上述方法添加进CaseStep
TestCase表存放case基本信息
CaseTemplate表存放case template基本信息,可以理解为我们有很多模块,比如recommendation,anti fraud等,描述各个module的基本情况
DbConnection表存放db connection信息,用于连接数据库验证某些页面操作的结果
task表存放一次执行case集合的结果,task_name指定此次task执行哪个项目用例,task_name的默认格式是***_UI_Automation,***标示项目,比如RCMD_UI_Automation antifraud_UI_Automation。这样写的目的是读取_之前的项目名称,据此从elements表中对比module字段读取element信息。
test_case_ids=[1,2,3]表示该次执行1,2,3三个case,exec_summary记录此次task的执行结果,total,fail,elapsed_time
execution表存放每个case在每个task中的具体执行结果,比如case 1在task 2中执行的结果,status记录执行成功(pass)还是失败(fail),result_data记录case每一个step的
actual_result和expected_result。倘若某一步无须验证,在result_data中显示{"expected": "", "actual": ""}。比如:
[{"expected": "", "actual": ""}, {"expected": "", "actual": ""}, {"expected": "", "actual": ""}, {"expected": "", "actual": ""}, {"expected": "", "actual": ""}, {"expected": "", "actual": ""}, {"expected": "", "actual": ""}, {"expected": "", "actual": ""}, {"expected": "", "actual": ""}, {"expected": "{\"feed_queue\": {\"expire\": 1595328790, \"has_more\": false, \"version\": \"v1\", \"groups\": [{\"data\": [{\"from\": \"FV2\", \"data_type\": \"feed\", \"country\": \"ID\", \"feedid\": 939943621416960, \"score\": 3.457621, \"feed_author\": 182560116}, {\"from\": \"FV2\", \"data_type\": \"feed\", \"country\": \"ID\", \"feedid\": 879914263155200, \"score\": 8.282281, \"feed_author\": 1290517}], \"key\": \"default\"}], \"time\": 1595325190, \"has_new\": false}}", "actual": "{\"feed_queue\": {\"version\": \"v1\", \"has_more\": false, \"expire\": 1595328790, \"groups\": [{\"data\": [{\"from\": \"FV2\", \"data_type\": \"feed\", \"country\": \"ID\", \"feedid\": 939943621416960, \"score\": 3.457621, \"feed_author\": 182560116}, {\"from\": \"FV2\", \"data_type\": \"feed\", \"country\": \"ID\", \"feedid\": 879914263155200, \"score\": 8.282281, \"feed_author\": 1290517}], \"key\": \"default\"}], \"time\": 1595325190, \"has_new\": false}}"}]
注意:所有的elements和action都是可以复用的,若没有所需的再新增即可
step 2: 右键执行 testcase.py文件开始执行一个task,会依次执行task中的一个个case
step 3: 执行用例后可去execution表查询对应的case执行结果;去task表查询task执行结果
to be continued....
原文:https://www.cnblogs.com/xingxing666/p/14898895.html