电子商务网站建设与维护致谢词,公众号开发是什么,wordpress获取输入框的值比较,中企动力做网站5个月了文章目录一、相关依赖注入二、注解调用三、断言 Assert四、规定用例执行顺序五、高效参数化1#xff09;单参数2#xff09;多参数3#xff09;文件获取参数4#xff09;方法获取数据#xff08;动态参数#xff09;六、测试套件整活Junit 是一个面向 Java 语言的单元测试…
文章目录一、相关依赖注入二、注解调用三、断言 Assert四、规定用例执行顺序五、高效参数化1单参数2多参数3文件获取参数4方法获取数据动态参数六、测试套件整活Junit 是一个面向 Java 语言的单元测试框架在 Java 开发过程中的单元测试阶段起着非常重要的作用。同时在 Web 自动化测试阶段Junit 是一个非常趁手的测试工具为 selenium 的使用注入灵魂
在之前写的自动化测试代码中调用测试用例使用的是非常原始的 main 函数调用需要实例化对象调用类的方法。除了书写带来的不便之外还存在着其他问题比如调用的其中一个测试用例失败了就会导致抛出异常剩下的测试用例没有办法执行到。
那么面对这样的问题Junit 采用更加简便的高效的注解的方式进行测试用例代码的调用。除了代码调用这些注解在其他方面使用过程中也发挥着重要的作用。
一、相关依赖注入
使用 Junit 就需要将相关的依赖进行注入操作放到 pom.xml 中的 dependencies 标签中同时selenium 相关依赖也需要注入注入完成后记得刷新
dependencygroupIdorg.seleniumhq.selenium/groupIdartifactIdselenium-java/artifactIdversion4.0.0/version
/dependencydependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter/artifactIdversion5.8.2/versionscopetest/scope
/dependency
dependencygroupIdorg.junit.platform/groupIdartifactIdjunit-platform-suite/artifactIdversion1.8.2/versionscopetest/scope
/dependency
dependencygroupIdorg.junit.platform/groupIdartifactIdjunit-platform-reporting/artifactIdversion1.8.2/versionscopetest/scope
/dependency二、注解调用
注解一Test
正如前面所说的那样Test 注解的作用就是使得测试用例能够被调用
private ChromeDriver driver new ChromeDriver();
Test
public void demoTest() {driver.get(https://www.baidu.com/);driver.findElement(By.id(kw)).sendKeys(狗狗);driver.findElement(By.id(su)).click();driver.quit();
}添加完 Test 注解后可以明显看见 demoTest 这个方法名高亮了并且左侧有绿色小三角形表示该测试用例可以通过点击绿色小三件形进行调用起来
执行完毕后可以在下方的结果区看见测试用例的执行状况。里面包含着用例的执行成功与否成功几个失败几个失败的话失败原因是什么等等
同时在多个测试用例需要被执行时我们只需要点击类名旁边的绿色小三角形就能执行到所有被启动注解标注过的用例一个用例的失败并不会影响到其他的用例 注解二、三BeforeEach、AfterEach
BeforeEach 显而易见它的意思就是在每个之前。该注解的作用就是使得被注解的方法在每个需要被执行的测试用例前都执行一遍
通常来说被 BeforeEach 标注的方法就不需要再使用 Test 注解标注了否则该用例执行前又会执行一遍该用例
BeforeEach
public void demoTest1() {System.out.println(before);
}
Test
public void demoTest2() {System.out.println(用例一);
}
Test
public void demoTest3() {System.out.println(用例二);
}同理AfterEach 注解的作用自然就是使得被其标注的方法在每个测试用例之后都执行一遍
注解四、五BeforeAll、AfterAll
通过上面的例子我们可以猜测的到这两个注解的作用一个是在所有测试用例执行前执行一遍另一个是在所有测试用例执行后执行一遍
需要格外注意的是被这两个注解标注的方法需要被 static 修饰
BeforeAll
public static void demoTest1() {System.out.println(before);
}
Test
public void demoTest2() {System.out.println(用例一);
}
Test
public void demoTest3() {System.out.println(用例二);
}三、断言 Assert
自动化的测试中 对于每个的用例来说一个用例的执行结果中 必然会有期望结果与实际结果 从而来判断该用例是通过还是失败。
Junit 提供了Assertions接口其中有大量的实用方法来检查预期值与实际值 来验证用例的结果。一般来说 检查条件大体分为等价性 逻辑比较以及其他。 如果给定的断言通过 测试会继续执行到下一行的代码 如果断言失败 对应的用例测试会立即停止或者生成错误信息( 一般打印错误信息即可) 但是不要影响其他的用例执行
在下面的案例中使用到的断言就是 Assertions.assertEquals(期望值,实际结果) 。如果期望值和实际结果相同就没问题反之如果不相同就表示出了错误在结果区会打印相关的错误日志
private ChromeDriver driver new ChromeDriver();
Test
public void demoTest() {driver.get(https://www.baidu.com/);String title driver.getTitle();Assertions.assertEquals(百度一下你就知道,title);driver.quit();
}断言用法简单且在实际应用过程中发挥着重要的作用除了上面的断言方法外
Assertions.assertNotEquals(,); //俩参数不同则没问题
Assertions.assertTrue(); //括号内表达式为真则没问题
Assertions.assertFalse(); //括号内表达式为假则没问题
Assertions.assertNull(); //括号内为null则没问题
Assertions.assertNotNull(); //括号内不为null则没问题
//......四、规定用例执行顺序
在有多个用例需要被执行的时候有必要时需要去规定用例的执行顺序。因为官方并没有规定顺序既不是按照用例书写顺序也不是按照字典序。
public class AutoTest2 {Testpublic void WTest() {System.out.println(WWW);}Testpublic void DTest2() {System.out.println(DDD);}Testpublic void MTest3() {System.out.println(MMM);}
}如果用例之间存在联系为了避免这样的联系导致用例执行的失败我们将就需要进行排序操作
使用到的注解有两个
注解一TestMethodOrder
表示需要按照方法进行排序Junit 中有多种排序方法
注解二Order
使用该注解标注需要进行排序的用例括号内填写用例执行顺序
TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class AutoTest2 {TestOrder(1)public void WTest() {System.out.println(WWW);}TestOrder(2)public void DTest2() {System.out.println(DDD);}TestOrder(3)public void MTest3() {System.out.println(MMM);}
}五、高效参数化
参数化是用例编写过程中非常常见的比如在百度搜索框中输入文本然后点击“百度一下按钮这样简单的操作如果没有进行参数化那么就会导致输入的文本的不同而写大量的类似代码非常的不方便
我们可以将输入的文本进行参数化从而减少代码冗余
注解一ParameterizedTest
标注方法类型为参数化有了该注解就不需要添加 Test 之类的启动注解了
1单参数
注解二ValueSource(类型 {“”,“”})
这里的类型是需要在原生类型的基础上添加s的比如 stringsintsdoublesfloatsbooleanschars…使用花括号包裹住所有的单参数
private ChromeDriver driver new ChromeDriver();BeforeEach
public void startTest() {driver.get(https://www.baidu.com/);driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
}ParameterizedTest
ValueSource(strings {狗狗,猫猫,兔兔})
public void demoTest(String content) throws InterruptedException {driver.findElement(By.id(kw)).sendKeys(content);driver.findElement(By.id(su)).click();
}AfterEach
public void endTest() {driver.quit();
}2多参数
注解三CsvSource(value {“”,“”,“”})
在双引号中的参数默认情况下使用逗号进行分割。
如果某参数中包含逗号那么就需要使用单引号将参数进行包裹。
如果需要使用其他的符号分割需要通过delimiterString属性进行说明
PS数字类型的参数是不能为空的字符串类型参数为空表示为 null
ParameterizedTest
CsvSource(value {李,雷-15,韩梅梅-18,李明-13},delimiterString -)
public void demoTest(String str,int num) {System.out.println(str:str num:num);
}3文件获取参数
在参数非常多的情况下全部写在代码中会显得非常的乱我们可以选择写到csv文件中从文件中获取参数内容
注解四CsvFileSource(resources “路径”)
表示从 csv 文件中获取信息如果括号内是resources 表示从 resources 文件夹下面获取文件。如果括号内是files表示可以从任意路径下面获取文件
ParameterizedTest
CsvFileSource(resources /data1.csv)
//CsvFileSource(files F:\\Work\\Test\\Selenium\\SeleniumPractice\\data2.csv)public void demoTest1(String str,int num) {System.out.println(str:str num:num);
}4方法获取数据动态参数
除了上面提到的获取数据方法外还可以从其他的方法中获取数据
注解五MethodSource
表示从方法中获取参数内容如果没有说明就是从同名的静态方法中获取。如果不同名的话需要在注解后面的括号中进行说明
ParameterizedTest
MethodSource
public void demoTest2(String str) {System.out.println(str:str);
}
//单参数
public static StreamString demoTest2() {return Stream.of(一帆风顺,四喜临门,八面玲珑);
}ParameterizedTest
MethodSource(dataFunc)
public void demoTest3(String str,int num) {System.out.println(str:str num:num);
}
//多参数
public static StreamArguments dataFunc() {return Stream.of(Arguments.arguments(七上,7),Arguments.arguments(八下,8));
}六、测试套件整活
如果想要一起执行多个类或者包中的用例就需要试用版到测试套件
注解一Suite
表示这是一个测试套件
注解二SelectClasses(value {,})
表示将指定的类下面的被执行注标注的用例进行执行
Suite
SelectClasses(value {AutoOneTest.class,AutoTest1.class})
public class RunSuite {}注解三SelectPackages(“包路径”)
表示将指定的包底下的符合标准的类下的用例进行执行标准指的是以 Test(s) 开头或结尾的类名
Suite
SelectPackages(com.Case.JunitTest)
public class RunSuite {}
文章转载自: http://www.morning.mkygc.cn.gov.cn.mkygc.cn http://www.morning.xscpq.cn.gov.cn.xscpq.cn http://www.morning.kwnnx.cn.gov.cn.kwnnx.cn http://www.morning.grpfj.cn.gov.cn.grpfj.cn http://www.morning.cbnlg.cn.gov.cn.cbnlg.cn http://www.morning.kfmnf.cn.gov.cn.kfmnf.cn http://www.morning.hhfwj.cn.gov.cn.hhfwj.cn http://www.morning.nmyrg.cn.gov.cn.nmyrg.cn http://www.morning.kmbgl.cn.gov.cn.kmbgl.cn http://www.morning.mznqz.cn.gov.cn.mznqz.cn http://www.morning.rlqqy.cn.gov.cn.rlqqy.cn http://www.morning.nzsdr.cn.gov.cn.nzsdr.cn http://www.morning.rmqlf.cn.gov.cn.rmqlf.cn http://www.morning.chehb.com.gov.cn.chehb.com http://www.morning.dgng.cn.gov.cn.dgng.cn http://www.morning.rqnzh.cn.gov.cn.rqnzh.cn http://www.morning.dxqwm.cn.gov.cn.dxqwm.cn http://www.morning.yrdn.cn.gov.cn.yrdn.cn http://www.morning.bjndc.com.gov.cn.bjndc.com http://www.morning.yrhpg.cn.gov.cn.yrhpg.cn http://www.morning.lkhfm.cn.gov.cn.lkhfm.cn http://www.morning.kbfzp.cn.gov.cn.kbfzp.cn http://www.morning.sgrwd.cn.gov.cn.sgrwd.cn http://www.morning.nknt.cn.gov.cn.nknt.cn http://www.morning.kkhf.cn.gov.cn.kkhf.cn http://www.morning.pmjw.cn.gov.cn.pmjw.cn http://www.morning.sxmbk.cn.gov.cn.sxmbk.cn http://www.morning.epeij.cn.gov.cn.epeij.cn http://www.morning.ryfq.cn.gov.cn.ryfq.cn http://www.morning.pxlql.cn.gov.cn.pxlql.cn http://www.morning.ksggl.cn.gov.cn.ksggl.cn http://www.morning.hjbrd.cn.gov.cn.hjbrd.cn http://www.morning.kpxky.cn.gov.cn.kpxky.cn http://www.morning.ryznd.cn.gov.cn.ryznd.cn http://www.morning.kwqcy.cn.gov.cn.kwqcy.cn http://www.morning.wyrsn.cn.gov.cn.wyrsn.cn http://www.morning.gjcdr.cn.gov.cn.gjcdr.cn http://www.morning.hsrpc.cn.gov.cn.hsrpc.cn http://www.morning.fnssm.cn.gov.cn.fnssm.cn http://www.morning.zdqsc.cn.gov.cn.zdqsc.cn http://www.morning.gnjtg.cn.gov.cn.gnjtg.cn http://www.morning.lqws.cn.gov.cn.lqws.cn http://www.morning.nzfqw.cn.gov.cn.nzfqw.cn http://www.morning.nmlpp.cn.gov.cn.nmlpp.cn http://www.morning.mdtfh.cn.gov.cn.mdtfh.cn http://www.morning.ykgkh.cn.gov.cn.ykgkh.cn http://www.morning.kncrc.cn.gov.cn.kncrc.cn http://www.morning.ktlfb.cn.gov.cn.ktlfb.cn http://www.morning.frsbf.cn.gov.cn.frsbf.cn http://www.morning.lbcbq.cn.gov.cn.lbcbq.cn http://www.morning.tjjkn.cn.gov.cn.tjjkn.cn http://www.morning.wtnyg.cn.gov.cn.wtnyg.cn http://www.morning.yfmxn.cn.gov.cn.yfmxn.cn http://www.morning.bcnsl.cn.gov.cn.bcnsl.cn http://www.morning.lrdzb.cn.gov.cn.lrdzb.cn http://www.morning.llcgz.cn.gov.cn.llcgz.cn http://www.morning.kqpxb.cn.gov.cn.kqpxb.cn http://www.morning.rlkgc.cn.gov.cn.rlkgc.cn http://www.morning.nlygm.cn.gov.cn.nlygm.cn http://www.morning.zwsgl.cn.gov.cn.zwsgl.cn http://www.morning.wgbmj.cn.gov.cn.wgbmj.cn http://www.morning.qtfss.cn.gov.cn.qtfss.cn http://www.morning.mfnsn.cn.gov.cn.mfnsn.cn http://www.morning.lmctj.cn.gov.cn.lmctj.cn http://www.morning.mbfj.cn.gov.cn.mbfj.cn http://www.morning.mnpdy.cn.gov.cn.mnpdy.cn http://www.morning.wkhfg.cn.gov.cn.wkhfg.cn http://www.morning.wrysm.cn.gov.cn.wrysm.cn http://www.morning.xhjjs.cn.gov.cn.xhjjs.cn http://www.morning.wgrl.cn.gov.cn.wgrl.cn http://www.morning.ppqjh.cn.gov.cn.ppqjh.cn http://www.morning.lgsfb.cn.gov.cn.lgsfb.cn http://www.morning.blznh.cn.gov.cn.blznh.cn http://www.morning.lfsmf.cn.gov.cn.lfsmf.cn http://www.morning.xbdrc.cn.gov.cn.xbdrc.cn http://www.morning.wsjnr.cn.gov.cn.wsjnr.cn http://www.morning.wlqbr.cn.gov.cn.wlqbr.cn http://www.morning.hxftm.cn.gov.cn.hxftm.cn http://www.morning.qgjxt.cn.gov.cn.qgjxt.cn http://www.morning.bttph.cn.gov.cn.bttph.cn