From 846dabb1adf5d544663fb62857c7cf095e75cd79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E5=AE=87=E7=90=A6?= <465615774@qq.com> Date: Fri, 3 Apr 2020 19:54:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0jira=E7=94=A8=E4=BE=8B?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E7=9A=84=E7=89=B9=E6=80=A7=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CaseTemplet/Username.xml | 349 ++++++++++-------- .../Jira数据有效性.xlsx | Bin 0 -> 10194 bytes .../jira测试用例导入模板.xml | 20 +- Result/测试用例.xlsx | Bin 5520 -> 13095 bytes .../pres/auxiliary/tool/file/DisposeText.java | 4 + .../auxiliary/tool/readfile/ListFileRead.java | 12 + .../n/testcase/file/JiraTestCaseWrite.java | 233 ++++++++++++ .../work/n/testcase/file/TestCaseWrite.java | 3 +- .../auxiliary/tool/file/DisposeTextTest.java | 11 + .../work/testcase/WriteTestCaseTest.java | 7 +- .../testcase/jira测试用例导入模板.xml | 53 --- 11 files changed, 482 insertions(+), 210 deletions(-) create mode 100644 ConfigurationFiles/CaseConfigurationFile/FileTemplet/JiraCaseFileTemplet/Jira数据有效性.xlsx create mode 100644 src/main/java/pres/auxiliary/work/n/testcase/file/JiraTestCaseWrite.java delete mode 100644 src/test/java/pres/auxiliary/work/testcase/jira测试用例导入模板.xml diff --git a/ConfigurationFiles/CaseConfigurationFile/CaseTemplet/Username.xml b/ConfigurationFiles/CaseConfigurationFile/CaseTemplet/Username.xml index 6395db6..c4f7dae 100644 --- a/ConfigurationFiles/CaseConfigurationFile/CaseTemplet/Username.xml +++ b/ConfigurationFiles/CaseConfigurationFile/CaseTemplet/Username.xml @@ -1,202 +1,257 @@ - + - - <keyword value="ȷ,û,,¼" /> - <rank value="1" /> + <titles> + <title id='1' value="通过正确的用户名与密码进行登录" /> + </titles> + <keys> + <key id='1' value="正确的,用户名,密码,登录" /> + </keys> + <ranks> + <rank id='1' value="1" /> + </ranks> <preconditions> </preconditions> <steps> - <step id="1" value="ȷû룬¼" /> + <step id="1" value="正确输入用户名及密码,登录" /> </steps> - <expectations> - <expectation id="1" value="¼ϵͳҵ½תҳȷ"/> - </expectations> + <excepts> + <except id="1" value="能正常登录系统,且登陆后跳转的页面正确" /> + </excepts> </case> - - <case name="addErrorLoginCase"> - <title value="ͨdzûе¼" /> - <keyword value="ȷ,û,,¼" /> - <rank value="2" /> + + <case name="addErrorLogkinCase"> + <titles> + <title id='1' value="通过非常规的用户名与密码进行登录" /> + </titles> + <keys> + <key id='1' value="不正确的,用户名,密码,登录" /> + </keys> + <ranks> + <rank id='1' value="2" /> + </ranks> <preconditions> </preconditions> <steps> - <step id="1" value="һڵû룬¼" /> - <step id="2" value="һڵû䲻Ӧ¼" /> - <step id="3" value="û¼" /> - <step id="4" value="룬¼" /> - <step id="5" value="ûĻַ¼" /> + <step id="1" value="输入一个不存在的用户名及密码,登录" /> + <step id="2" value="输入一个存在的用户名但密码输入与其不对应,登录" /> + <step id="3" value="不输入用户名,登录" /> + <step id="4" value="不输入密码,登录" /> + <step id="5" value="在用用户名与密码中输入中文或特殊字符,登录" /> </steps> - <expectations> - <expectation id="1" value="޷¼Ӧʾ"/> - <expectation id="2" value="޷¼Ӧʾ"/> - <expectation id="3" value="޷¼Ӧʾ"/> - <expectation id="4" value="޷¼Ӧʾ"/> - <expectation id="5" value="ĵûעᣬ¼ϵͳҵ½תҳȷעᣬ޷¼Ӧʾ"/> - </expectations> + <excepts> + <except id="1" value="无法登录,并给出相应的提示" /> + <except id="2" value="无法登录,并给出相应的提示" /> + <except id="3" value="无法登录,并给出相应的提示" /> + <except id="4" value="无法登录,并给出相应的提示" /> + <except id="5" + value="若带中文的用户名或密码能注册,则能正常登录系统,且登陆后跳转的页面正确;若不能注册,则无法登录,并给出相应的提示" /> + </excepts> </case> - + <case name="addCaptchaCase"> - <title value="벻֤ͬе¼" /> - <keyword value="֤,¼" /> - <rank value="1" /> + <titles> + <title id='1' value="输入不同的验证码进行登录" /> + </titles> + <keys> + <key id='1' value="验证码,登录" /> + </keys> + <ranks> + <rank id='1' value="1" /> + </ranks> <preconditions> - <precondition value="ʺźȷ" /> + <precondition id='1' value="帐号和密码输入正确" /> </preconditions> <steps> - <step id="1" value="ȷ֤룬¼" /> - <step id="2" value="֤룬¼" /> - <step id="3" value="֤룬¼" /> + <step id="1" value="正确输入验证码,登录" /> + <step id="2" value="不输入验证码,登录" /> + <step id="3" value="输入错误的验证码,登录" /> </steps> - <expectations> - <expectation id="1" value="¼ϵͳҵ½תҳȷ"/> - <expectation id="2" value="޷¼Ӧʾ"/> - <expectation id="3" value="޷¼Ӧʾ"/> - </expectations> + <excepts> + <except id="1" value="能正常登录系统,且登陆后跳转的页面正确" /> + <except id="2" value="无法登录,并给出相应的提示" /> + <except id="3" value="无法登录,并给出相应的提示" /> + </excepts> </case> - + <case name="addLoginAuthorityCase"> - <title value="ͨͬȨ޵ʺŽе¼" /> - <keyword value="Ȩ,¼" /> - <rank value="1" /> + <titles> + <title id='1' value="通过不同权限的帐号进行登录" /> + </titles> + <keys> + <key id='1' value="权限,登录" /> + </keys> + <ranks> + <rank id='1' value="1" /> + </ranks> <preconditions> - <precondition value="ʺźȷ" /> + <precondition id='1' value="帐号和密码输入正确" /> </preconditions> <steps> - <step id="1" value="벻ͬȨ޵ʺź룬¼" /> - <step id="2" value="е¼ҳ֮Ȩ޲Ӧʺţ¼" /> + <step id="1" value="输入不同权限的帐号和密码,登录" /> + <step id="2" value="在所有登录页面上输入与之权限不对应的帐号,登录" /> </steps> - <expectations> - <expectation id="1" value="¼ϵͳҵ½ܿȨ޶Ӧҳ漰"/> - <expectation id="2" value="޷¼Ӧʾ"/> - </expectations> + <excepts> + <except id="1" value="能正常登录系统,且登陆后能看到权限对应的页面及功能" /> + <except id="2" value="无法登录,并给出相应的提示" /> + </excepts> </case> - + <case name="addUsernameRegisterCase"> - <title value="ע᲻ͬû˺" /> - <keyword value="û,ע" /> - <rank value="1" /> + <titles> + <title id='1' value="注册不同用户名的账号" /> + </titles> + <keys> + <key id='1' value="用户名,注册" /> + </keys> + <ranks> + <rank id='1' value="1" /> + </ranks> <preconditions> - <precondition value="ע˺Ž" /> - <precondition value="û⣬Ϣȷд" /> + <precondition id='1' value="已在注册账号界面" /> + <precondition id='2' value="除用户名外,其他信息均正确填写" /> </preconditions> <steps> - <step id="1" value="ͨһδעȷûע" /> - <step id="2" value="ͨһעûע" /> - <step id="3" value="һ11λַע" /> - <step id="4" value="һС11λַע" /> - <step id="5" value="ַע" /> - <step id="6" value="ͨһҪûע" /> - <step id="7" value="ûע" /> + <step id="1" value="通过一个未被注册且正确的用户名进行注册操作" /> + <step id="2" value="通过一个已注册的用户名进行注册操作" /> + <step id="3" value="输入一个大于11位的数字字符进行注册操作" /> + <step id="4" value="输入一个小于11位的数字字符进行注册操作" /> + <step id="5" value="输入非数字字符进行注册操作" /> + <step id="6" value="通过一个不符合要求的用户名进行注册操作" /> + <step id="7" value="不输入用户名进行注册操作" /> </steps> - <expectations> - <expectation id="1" value="עɺͨʺżӦе¼"/> - <expectation id="2" value="ʾûѴ"/> - <expectation id="3" value="ʾû"/> - <expectation id="4" value="ʾû"/> - <expectation id="5" value="ʾû"/> - <expectation id="6" value="ʾû"/> - <expectation id="7" value="ʾû"/> - </expectations> + <excepts> + <except id="1" value="注册完成后能通过该帐号及对应的密码进行登录" /> + <except id="2" value="提示用户名已存在" /> + <except id="3" value="提示用户名不合理" /> + <except id="4" value="提示用户名不合理" /> + <except id="5" value="提示用户名不合理" /> + <except id="6" value="提示用户名不合理" /> + <except id="7" value="提示请输入用户名" /> + </excepts> </case> - + <case name="addUsernameForgetCase"> - <title value="ͨͬû˺Ž" /> - <keyword value="û," /> - <rank value="1" /> + <titles> + <title id='1' value="通过不同用户名的账号进行忘记密码操作" /> + </titles> + <keys> + <key id='1' value="用户名,忘记密码" /> + </keys> + <ranks> + <rank id='1' value="1" /> + </ranks> <preconditions> - <precondition value="" /> - <precondition value="û⣬Ϣȷд" /> + <precondition id='1' value="已在忘记密码界面" /> + <precondition id='2' value="除用户名外,其他信息均正确填写" /> </preconditions> <steps> - <step id="1" value="ͨһѴȷû" /> - <step id="2" value="ͨһڵû" /> - <step id="3" value="ͨһҪû" /> - <step id="4" value="û" /> + <step id="1" value="通过一个已存在且正确的用户名进行忘记密码操作" /> + <step id="2" value="通过一个不存在的用户名进行忘记密码操作" /> + <step id="3" value="通过一个不符合要求的用户名进行忘记密码操作" /> + <step id="4" value="不输入用户名进行忘记密码操作" /> </steps> - <expectations> - <expectation id="1" value="޸ijɹҿʹøʺż޸ĵе¼"/> - <expectation id="2" value="ʾû"/> - <expectation id="3" value="ʾû"/> - <expectation id="4" value="ʾû"/> - </expectations> + <excepts> + <except id="1" value="密码修改成功,并且可以使用该帐号及修改的密码进行登录操作" /> + <except id="2" value="提示用户名不存在" /> + <except id="3" value="提示用户名不合理" /> + <except id="4" value="提示请输入用户名" /> + </excepts> </case> - + <case name="addPasswordRegisterOrForgetCase"> - <title value="ͨͬ*{operation}*" /> - <keyword value=",*{operation}*" /> - <rank value="1" /> + <titles> + <title id='1' value="通过不同的密码进行*{操作类型}*操作" /> + </titles> + <keys> + <key id='1' value="密码,*{操作类型}*" /> + </keys> + <ranks> + <rank id='1' value="1" /> + </ranks> <preconditions> - <precondition value="*{operation}*˺Ž" /> - <precondition value="⣬Ϣȷд" /> + <precondition id='1' value="已在*{操作类型}*账号界面" /> + <precondition id='2' value="除密码外,其他信息均正确填写" /> </preconditions> <steps> - <step id="1" value="ͨȷ*{operation}*" /> - <step id="2" value="ͨһҪ*{operation}*" /> - <step id="3" value="*{operation}*" /> - <step id="4" value="ٴ룬*{operation}*" /> - <step id="5" value="벻һº*{operation}*" /> + <step id="1" value="通过正确的密码进行*{操作类型}*操作" /> + <step id="2" value="通过一个不符合要求的密码进行*{操作类型}*操作" /> + <step id="3" value="不输入密码进行*{操作类型}*操作" /> + <step id="4" value="不再次输入密码,*{操作类型}*操作" /> + <step id="5" value="两次密码输入不一致后进行*{操作类型}*操作" /> </steps> - <expectations> - <expectation id="1" value="*{operation}*ɺͨʺżӦе¼"/> - <expectation id="2" value="ʾ벻"/> - <expectation id="3" value="ʾ"/> - <expectation id="4" value="ʾ벻һ»ʾȷ"/> - <expectation id="5" value="ʾ벻һ"/> - </expectations> + <excepts> + <except id="1" value="*{操作类型}*操作完成后能通过该帐号及对应的密码进行登录" /> + <except id="2" value="提示密码不合理" /> + <except id="3" value="提示请输入密码" /> + <except id="4" value="提示两次密码输入不一致或者提示输入确认密码" /> + <except id="5" value="提示两次密码输入不一致" /> + </excepts> </case> - + <case name="addCodeRegisterOrForgetCase"> - <title value="֤ͨͬ*{operation}*" /> - <keyword value="֤,*{operation}*" /> - <rank value="1" /> + <titles> + <title id='1' value="通过不同的验证码进行*{操作类型}*操作" /> + </titles> + <keys> + <key id='1' value="验证码,*{操作类型}*" /> + </keys> + <ranks> + <rank id='1' value="1" /> + </ranks> <preconditions> - <precondition value="*{operation}*˺Ž" /> - <precondition value="⣬Ϣȷд" /> + <precondition id='1' value="已在*{操作类型}*账号界面" /> + <precondition id='2' value="除密码外,其他信息均正确填写" /> </preconditions> <steps> - <step id="1" value="ͨȷ֤*{operation}*" /> - <step id="2" value="ͨһȷ֤*{operation}*" /> - <step id="3" value="֤*{operation}*" /> - <step id="4" value="·֤һε֤" /> - <step id="5" value="·֤µ֤" /> - <step id="6" value="֤Ĺʱ֤룬*{operation}*" /> + <step id="1" value="通过正确的验证码进行*{操作类型}*" /> + <step id="2" value="通过一个不正确的验证码进行*{操作类型}*" /> + <step id="3" value="不输入验证码进行*{操作类型}*" /> + <step id="4" value="重新发送验证码后输入上一次的验证码" /> + <step id="5" value="重新发送验证码后输入新的验证码" /> + <step id="6" value="超过验证码的过期时间后再输入验证码,*{操作类型}*" /> </steps> - <expectations> - <expectation id="1" value="*{operation}*ɺͨʺżӦе¼"/> - <expectation id="2" value="ʾ֤벻ȷ"/> - <expectation id="3" value="ʾ֤"/> - <expectation id="4" value="ʾ֤"/> - <expectation id="5" value="*{operation}*ɺͨʺżӦе¼"/> - <expectation id="6" value="ʾ֤벻ȷ"/> - </expectations> + <excepts> + <except id="1" value="*{操作类型}*操作完成后能通过该帐号及对应的密码进行登录" /> + <except id="2" value="提示验证码不正确" /> + <except id="3" value="提示请输入验证码" /> + <except id="4" value="提示验证码输入有误" /> + <except id="5" value="*{操作类型}*操作完成后能通过该帐号及对应的密码进行登录" /> + <except id="6" value="提示验证码不正确" /> + </excepts> </case> - + <case name="addAlterPasswordCase"> - <title value="޸û" /> - <keyword value="޸," /> - <rank value="1" /> + <titles> + <title id='1' value="修改用户密码" /> + </titles> + <keys> + <key id='1' value="修改,密码" /> + </keys> + <ranks> + <rank id='1' value="1" /> + </ranks> <preconditions> - <precondition value="ѵ¼ϵͳ" /> - <precondition value="⣬Ϣȷд" /> + <precondition id='1' value="已登录系统" /> + <precondition id='2' value="除密码外,其他信息均正确填写" /> </preconditions> <steps> - <step id="1" value="ȷԭ벢Ҫ޸" /> - <step id="2" value="ԭ޸" /> - <step id="3" value="ԭ޸" /> - <step id="4" value="һҪ޸" /> - <step id="5" value="޸" /> - <step id="6" value="ٴ޸" /> - <step id="7" value="벻һº޸" /> + <step id="1" value="正确输入原密码并按要求输入新密码后修改密码" /> + <step id="2" value="输入错误的原密码后修改密码" /> + <step id="3" value="不输入原密码进行修改密码" /> + <step id="4" value="输入一个不符合要求的密码进行修改密码" /> + <step id="5" value="不输入密码进行修改密码" /> + <step id="6" value="不再次输入密码进行修改密码" /> + <step id="7" value="两次密码输入不一致后进行修改密码" /> </steps> - <expectations> - <expectation id="1" value="޸ɹʺͨ޸ĵе¼"/> - <expectation id="2" value="ʾûԭ"/> - <expectation id="3" value="ʾԭ"/> - <expectation id="4" value="ʾ벻"/> - <expectation id="5" value="ʾ"/> - <expectation id="6" value="ʾ벻һ»ʾȷ"/> - <expectation id="7" value="ʾ벻һ"/> - </expectations> + <excepts> + <except id="1" value="修改密码成功,该帐号能通过新修改的密码进行登录" /> + <except id="2" value="提示用户原密码输入有误" /> + <except id="3" value="提示请输入原密码" /> + <except id="4" value="提示密码不合理" /> + <except id="5" value="提示请输入密码" /> + <except id="6" value="提示两次密码输入不一致或者提示输入确认密码" /> + <except id="7" value="提示两次密码输入不一致" /> + </excepts> </case> </cases> \ No newline at end of file diff --git a/ConfigurationFiles/CaseConfigurationFile/FileTemplet/JiraCaseFileTemplet/Jira数据有效性.xlsx b/ConfigurationFiles/CaseConfigurationFile/FileTemplet/JiraCaseFileTemplet/Jira数据有效性.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8a7e47edb5b2618922e377a59d2f7ff3c5f9d6bc GIT binary patch literal 10194 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 U0g6EY03G_Hhr;+3?a!<K2fWv8_5c6? literal 0 HcmV?d00001 diff --git a/ConfigurationFiles/CaseConfigurationFile/FileTemplet/JiraCaseFileTemplet/jira测试用例导入模板.xml b/ConfigurationFiles/CaseConfigurationFile/FileTemplet/JiraCaseFileTemplet/jira测试用例导入模板.xml index 885fdf3..1136db5 100644 --- a/ConfigurationFiles/CaseConfigurationFile/FileTemplet/JiraCaseFileTemplet/jira测试用例导入模板.xml +++ b/ConfigurationFiles/CaseConfigurationFile/FileTemplet/JiraCaseFileTemplet/jira测试用例导入模板.xml @@ -5,14 +5,13 @@ <column id='标题' name='Name' wide='30.88' align='left'/> <column id='目的' name='Objective' wide='18.25' align='left'/> <column id='前置条件' name='Precondition' wide='18.25' align='left' index='true'/> + <column id='步骤' name='Test Script (Step-by-Step) - Step' wide='45.75' align='left' row_text='1' index='true'/> + <column id='预期' name='Test Script (Step-by-Step) - Expected Result' wide='45.75' align='left' row_text='1' index='true'/> <column id='模块' name='Folder' wide='22.00' align='center'/> <column id='状态' name='Status' wide='10.00' align='center'/> <column id='优先级' name='Priority' wide='10.00' align='center'/> <column id='项目' name='Component' wide='10.00' align='center'/> <column id='设计者' name='Owner' wide='10.00' align='center'/> - <column id='步骤' name='Test Script (Step-by-Step) - Step' wide='45.75' align='left' row_text='1' index='true'/> - <column id='预期' name='Expected Test Script (Step-by-Step) - Expected Result' wide='45.75' align='left' row_text='1' index='true'/> - <column id='步骤' name='Test Script (Step-by-Step) - Step' wide='45.75' align='left' row_text='1' index='true'/> <column id='关键用例' name='关键用例' wide='10.00' align='center'/> <column id='关联需求' name='Coverage (Issues)' wide='20.00' align='center'/> @@ -29,13 +28,20 @@ </datas> <datas id='项目'> - <data name='High' /> - <data name='Normal' /> - <data name='Low' /> + <file path='ConfigurationFiles/CaseConfigurationFile/FileTemplet/JiraCaseFileTemplet/Jira数据有效性.xlsx' regex='Sheet1' column='0' start_row='1' /> + </datas> + + <datas id='关联需求'> + <file path='ConfigurationFiles/CaseConfigurationFile/FileTemplet/JiraCaseFileTemplet/Jira数据有效性.xlsx' regex='Sheet1' column='1' start_row='1' /> </datas> <datas id='模块'> - <file path='Test/ListDataFile/模块信息.xlsx' regex='Sheet1' column='2' start_row='2' end_row='11' /> + <file path='ConfigurationFiles/CaseConfigurationFile/FileTemplet/JiraCaseFileTemplet/Jira数据有效性.xlsx' regex='Sheet1' column='2' start_row='1' /> + </datas> + + <datas id='关键用例'> + <data name='是' /> + <data name='否' /> </datas> </sheet> diff --git a/Result/测试用例.xlsx b/Result/测试用例.xlsx index 97bed0e0773eaf3887246531e54a9bbae9104845..9e7de3474c58921a85a01bf198e85b01805d4037 100644 GIT binary patch literal 13095 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 BI!XWl literal 5520 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 QBg4M#VT-+g0r%^F04p0c3jhEB diff --git a/src/main/java/pres/auxiliary/tool/file/DisposeText.java b/src/main/java/pres/auxiliary/tool/file/DisposeText.java index 390be22..35348e9 100644 --- a/src/main/java/pres/auxiliary/tool/file/DisposeText.java +++ b/src/main/java/pres/auxiliary/tool/file/DisposeText.java @@ -309,6 +309,10 @@ public class DisposeText { Sheet sheet = excel.getSheetAt(0); for (int i = 0; i < sheet.getLastRowNum(); i++) { Row row = sheet.getRow(i); + //若获取不到行,则说明该行无数据,直接继续循环 + if (row == null) { + continue; + } for (int j = 0; j < row.getLastCellNum(); j++) { try { Cell cell = row.getCell(j); diff --git a/src/main/java/pres/auxiliary/tool/readfile/ListFileRead.java b/src/main/java/pres/auxiliary/tool/readfile/ListFileRead.java index 9f70d55..29c1ca8 100644 --- a/src/main/java/pres/auxiliary/tool/readfile/ListFileRead.java +++ b/src/main/java/pres/auxiliary/tool/readfile/ListFileRead.java @@ -297,6 +297,18 @@ public class ListFileRead { public int getMaxColumnNumber() { return maxColumnNum; } + + /** + * 返回制定列的元素个数 + * @param columnIndex 列下标 + * @return 相应列的长度 + */ + public int getCoulumnSize(int columnIndex) { + columnIndex = columnIndex >= maxColumnNum ? maxColumnNum : columnIndex; + columnIndex = columnIndex < 0 ? 0 : columnIndex; + + return wordList.get(columnIndex).size(); + } /** * 该方法用于读取并处理csv格式文件 diff --git a/src/main/java/pres/auxiliary/work/n/testcase/file/JiraTestCaseWrite.java b/src/main/java/pres/auxiliary/work/n/testcase/file/JiraTestCaseWrite.java new file mode 100644 index 0000000..24adbab --- /dev/null +++ b/src/main/java/pres/auxiliary/work/n/testcase/file/JiraTestCaseWrite.java @@ -0,0 +1,233 @@ +package pres.auxiliary.work.n.testcase.file; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; + +import pres.auxiliary.work.n.testcase.templet.LabelType; + +/** + * <p><b>文件名:</b>JiraTestCaseWrite.java</p> + * <p><b>用途:</b>用于对上传jira测试用例模板,通过该类构造的用例文件,在使用测试用例 + * 模板类写入用例时可以不用指定相应的字段关系。该类中包含部分个性的方法,以方便编写 + * 测试用例</p> + * <p><b>编码时间:</b>2020年4月3日下午4:23:05</p> + * <p><b>修改时间:</b>2020年4月3日下午4:23:05</p> + * @author 彭宇琦 + * @version Ver1.0 + * @since JDK 12 + * + */ +public class JiraTestCaseWrite extends TestCaseWrite { + /** + * 通过测试文件模板xml配置文件和测试用例文件来构造WriteTestCase类。当配置文件中 + * 只存在一个sheet标签时,则直接获取其对应sheet下所有column标签的id属性;若存在 + * 多个sheet标签时,则读取第一个sheet标签,如需切换sheet标签,则可调用{@link #switchSheet(String)} 方法。 + * + * @param configFile 测试文件模板xml配置文件类对象 + * @param caseFile 测试用例文件类对象 + * @throws IncorrectFileException 文件格式或路径不正确时抛出的异常 + */ + public JiraTestCaseWrite(File configFile, File caseFile) { + super(configFile, caseFile); + + //TODO 添加与测试用例模板的关联,若测试用例模板字段有所改变,则在此改变关联字段 + relevanceCase(JiraFieldIdType.STEP.getName(), LabelType.STEP.getName()); + relevanceCase(JiraFieldIdType.EXCEPT.getName(), LabelType.EXCEPT.getName()); + relevanceCase(JiraFieldIdType.PRECONDITION.getName(), LabelType.PRECONDITION.getName()); + relevanceCase(JiraFieldIdType.PRIORITY.getName(), LabelType.RANK.getName()); + relevanceCase(JiraFieldIdType.TITLE.getName(), LabelType.TITLE.getName()); + } + + /** + * 用于写入标题信息,由于标题唯一且不换行,故重复调用该方法时将覆盖原写入的内容。 + * 写入的内容可以使用替换符,具体规则可以参见{@link #addContent(String, String...)} + * @param title 标题 + * @return 类本身 + */ + public JiraTestCaseWrite addTitle(String title) { + //清除原有的内容 + clearContent(JiraFieldIdType.TITLE.getName()); + //重新将标题数据写入到用例中 + addContent(JiraFieldIdType.TITLE.getName(), title); + + return this; + } + + /** + * 用于写入步骤信息 + * @param stpes 步骤 + * @return 类本身 + */ + public JiraTestCaseWrite addStep(String... steps) { + //写入步骤信息 + addContent(JiraFieldIdType.STEP.getName(), steps); + + return this; + } + + /** + * 用于写入预期信息 + * @param stpes 预期 + * @return 类本身 + */ + public JiraTestCaseWrite addExcept(String... excepts) { + //写入预期信息 + addContent(JiraFieldIdType.EXCEPT.getName(), excepts); + + return this; + } + + /** + * 由于步骤与预期是对应的,故可使用该方法写入一条步骤与预期信息 + * @param step 步骤 + * @param except 预期 + * @return 类本身 + */ + public JiraTestCaseWrite addStepAndExcept(String step, String except) { + //写入步骤信息 + addContent(JiraFieldIdType.STEP.getName(), step); + //写入预期信息 + addContent(JiraFieldIdType.EXCEPT.getName(), except); + + return this; + } + + /** + * 用于根据数据有效性顺序选择相应的模块信息,重复调用该方法时将覆盖原写入的内容。 + * @param index 模块对应的数据有效性选项 + * @return 类本身 + */ + public JiraTestCaseWrite addFolder(int index) { + //清除原有的内容 + clearContent(JiraFieldIdType.FOLDER.getName()); + //由于传入的本身为数字,故可直接将数字转换成字符串后传入到addContent中 + addContent(JiraFieldIdType.FOLDER.getName(), String.valueOf(index)); + + return this; + } + + /** + * 根据关键词,匹配相应的模块信息,若未传入信息,则不写入信息,若能匹配信息,则会有以下三种情况: + * <ol> + * <li>匹配一个结果,则直接存入结果</li> + * <li>匹配多个结果,则存入第一个命中的结果</li> + * <li>无匹配结果,则以“key1/key2/key3/.../keyN/”的形式拼接字符串</li> + * </ol> + * 重复调用该方法时将覆盖原写入的内容。 + * @param keys 关键词组 + * @return 类本身 + */ + public JiraTestCaseWrite addFolder(String... keys) { + //清除原有的内容 + clearContent(JiraFieldIdType.FOLDER.getName()); + + //若未传入关键词,则不填写信息 + if (keys == null) { + return this; + } + + //获取数据有效性 + ArrayList<String> dataList = fieldMap.get(JiraFieldIdType.FOLDER.getName()).matchDataValidation(keys); + //存储最终得到的模块信息 + StringBuilder dataText = new StringBuilder(); + + //匹配模块信息,分为三种情况: + //1.命中一个结果,则直接存入结果 + //2.命中多个结果,则存入第一个命中的结果 + //3.未命中结果,则以“key1/key2/key3/.../keyN/”的形式拼接字符串 + + if (dataList.size() >= 1) { + dataText.append(dataList.get(0)); + } else { + Arrays.stream(keys).forEach(text -> { + //拼接关键词 + dataText.append("/" + text); + }); + } + + //写入得到的关键词 + addContent(JiraFieldIdType.FOLDER.getName(), String.valueOf(dataText.toString())); + return this; + } + + /** + * <p><b>文件名:</b>JiraTestCaseWrite.java</p> + * <p><b>用途:</b>用于枚举出jira用例文件模板xml文件中所有字段</p> + * <p><b>编码时间:</b>2020年4月3日下午4:04:30</p> + * <p><b>修改时间:</b>2020年4月3日下午4:04:30</p> + * @author 彭宇琦 + * @version Ver1.0 + * @since JDK 12 + * + */ + enum JiraFieldIdType { + /** + * 标题(Name) + */ + TITLE("标题"), + /** + * 目的(Objective) + */ + OBJECTIVE("目的"), + /** + * 前置条件(Precondition) + */ + PRECONDITION("前置条件"), + /** + * 步骤(Test Script (Step-by-Step) - Step) + */ + STEP("步骤"), + /** + * 预期(Test Script (Step-by-Step) - Expected Result) + */ + EXCEPT("预期"), + /** + * 模块(Folder) + */ + FOLDER("模块"), + /** + * 状态(Status) + */ + STATUS("状态"), + /** + * 优先级(Priority) + */ + PRIORITY("优先级"), + /** + * 项目(Component) + */ + COMPONENT("项目"), + /** + * 设计者(Owner) + */ + OWNER("设计者"), + /** + * 关联需求(Coverage (Issues)) + */ + ISSUES("关联需求"), + /** + * 关键用例 + */ + CASE_KEY("关键用例"), + ; + //用于存储枚举的名称 + private String name = ""; + + /** + * 初始化枚举值 + * @param value 枚举值 + */ + private JiraFieldIdType(String name) { + this.name = name; + } + + /** + * 用于返回枚举中存储的内容,即jira用例文件模板中的字段ID + * @return 枚举值 + */ + public String getName() { + return name; + } + } +} diff --git a/src/main/java/pres/auxiliary/work/n/testcase/file/TestCaseWrite.java b/src/main/java/pres/auxiliary/work/n/testcase/file/TestCaseWrite.java index 22d564a..636aac3 100644 --- a/src/main/java/pres/auxiliary/work/n/testcase/file/TestCaseWrite.java +++ b/src/main/java/pres/auxiliary/work/n/testcase/file/TestCaseWrite.java @@ -69,7 +69,7 @@ public class TestCaseWrite { /** * 用于存储一条用例的信息,第一个参数指向配置文件中的字段id,第二个字段为xml文件中字段的相应信息 */ - private HashMap<String, Field> fieldMap = new HashMap<>(16); + HashMap<String, Field> fieldMap = new HashMap<>(16); /** * 用于存储所有用例均使用的字段常值 @@ -283,7 +283,6 @@ public class TestCaseWrite { return this; } - if (fieldMap.get(field).datas.size() != 0) { //查找数据有效性,若当前字段存在数据有效性,则将数据有效性转义,若添加的字段无法转义,则存储原内容 contents = dataValidityChange(contents, fieldMap.get(field)); diff --git a/src/test/java/pres/auxiliary/tool/file/DisposeTextTest.java b/src/test/java/pres/auxiliary/tool/file/DisposeTextTest.java index 41a776d..a367f02 100644 --- a/src/test/java/pres/auxiliary/tool/file/DisposeTextTest.java +++ b/src/test/java/pres/auxiliary/tool/file/DisposeTextTest.java @@ -33,4 +33,15 @@ public class DisposeTextTest { bw.close(); } + + @Test + public void getFloder() throws IOException { + BufferedWriter bw = new BufferedWriter(new FileWriter(new File("D:\\8.test\\FloderInformation.txt"))); + for (String text : DisposeText.wordDelDuplication(new File("D:\\8.test\\kanoahtests-tests-export1018607237477323352.xlsx"))) { + bw.write(text); + bw.newLine(); + } + + bw.close(); + } } diff --git a/src/test/java/pres/auxiliary/work/testcase/WriteTestCaseTest.java b/src/test/java/pres/auxiliary/work/testcase/WriteTestCaseTest.java index dfea267..15fbe5c 100644 --- a/src/test/java/pres/auxiliary/work/testcase/WriteTestCaseTest.java +++ b/src/test/java/pres/auxiliary/work/testcase/WriteTestCaseTest.java @@ -44,7 +44,7 @@ public class WriteTestCaseTest { /** * 配置文件类对象 */ - File conFile = new File("src/test/java/pres/auxiliary/work/testcase/jira测试用例导入模板.xml"); + File conFile = new File("ConfigurationFiles/CaseConfigurationFile/FileTemplet/JiraCaseFileTemplet/jira测试用例导入模板.xml"); /** * 模板文件类对象 */ @@ -121,6 +121,11 @@ public class WriteTestCaseTest { wtc.addCase(ic.addRadioButtonCase("测试控件")).end(); } + @Test + public void test() { + System.out.println(String.valueOf(System.currentTimeMillis()).length()); + } + /** * 测试{@link TestCaseWrite#setReplactWord(String, String)}方法 diff --git a/src/test/java/pres/auxiliary/work/testcase/jira测试用例导入模板.xml b/src/test/java/pres/auxiliary/work/testcase/jira测试用例导入模板.xml deleted file mode 100644 index 19d0803..0000000 --- a/src/test/java/pres/auxiliary/work/testcase/jira测试用例导入模板.xml +++ /dev/null @@ -1,53 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?> -<templet> - <!-- id控制sheet的代号,name表示文件中sheet的名称,freeze表示需要冻结的前几列 --> - <sheet name='测试用例' freeze='2'> - <column id='标题' name='Name' wide='30.88' align='left'/> - <column id='目的' name='Objective' wide='18.25' align='left'/> - <column id='前置条件' name='Precondition' wide='18.25' align='left' index='true'/> - <column id='模块' name='Folder' wide='22.00' align='center'/> - <column id='状态' name='Status' wide='10.00' align='center'/> - <column id='优先级' name='Priority' wide='10.00' align='center'/> - <column id='项目' name='Component' wide='10.00' align='center'/> - <column id='设计者' name='Owner' wide='10.00' align='center'/> - <column id='步骤' name='Step' wide='45.75' align='left' row_text='1' index='true'/> - <column id='预期' name='Expected Result' wide='45.75' align='left' row_text='1' index='true'/> - - <datas id='状态'> - <data name='Approved' /> - <data name='Draft' /> - <data name='Deprecated' /> - </datas> - - <datas id='优先级'> - <data name='High' /> - <data name='Normal' /> - <data name='Low' /> - </datas> - - <datas id='模块'> - <file path='Test/ListDataFile/模块信息.xlsx' regex='Sheet1' column='2' start_row='2' end_row='11' /> - </datas> - </sheet> - - <!-- 测试程序时使用 --> - <!-- - <sheet name='测试用例2' freeze='3'> - <column id='标题' name='Name' wide='30.88' align='center'/> - <column id='目的' name='Objective' wide='18.25' align='center'/> - <column id='前置条件' name='Precondition' wide='18.25' align='center'/> - - <datas id='目的'> - <data name='1' /> - <data name='2' /> - <data name='3' /> - </datas> - - <datas id='标题'> - <data name='呵呵' /> - <data name='哈哈' /> - <data name='嘻嘻' /> - </datas> - </sheet> - --> -</templet> \ No newline at end of file