时间:2019年2月23日,农历正月十九,星期六,天气晴,略有阳光,但下午三点多就不见阳光了。

地点:上海

昨夜雨疏风骤,浓睡不消残酒。
试问卷帘人,却道海棠依旧。
知否?知否?应是绿肥红瘦

是的,魔都上海确实昨夜雨疏风骤,在连续下了40几天雨之后,今天魔都终于天晴了。

也真是没谁了,除了魔都还有哪个地方能连续下40几天雨。上上周(正月初四)听广播说上一次魔都连续下了45天雨,但上一次是那一年呢,上一次是1919年,现在都2019了,100年一遇呀。

为啥是乍暖还寒冷时,这个季节本来就是冬天还没结束春还没来,春节的尾巴。

元宵节在本周二就过完了,然而魔都是否还是没有像往些年那么多人人人人多,难道传说中的逃离魔都在今年比往年更严重?

好吧,开始学习TestNG.

学TestNG是因为Selenium这个魔人小妖精需要用到TestNG。

这里要记录的是Test NG的Suite,group,test等等在testng.xml里面的配置。

我们下好的以@Test注解标注的方法是可以直接用Eclipse-Run As TestNG运行的。

比如,我有一个Cat.java文件,里面有个Cat Class,Cat Class里面又三个方法,这都可以用Eclipse-Run As TestNG运行的。

比如,一个Cat.java文件,里面有个Cat Class和一个 Mouse Class里面都各有三个方法,这还是可以可以用Eclipse-Run As TestNG运行的。

比如,一个Cat.java文件,里面有个Cat Class和一个 Mouse Class里面都各有三个方法;

然后,我还有一个Dog.java文件,里面也又三个方法,这是我选择Cat.Java那肯定只能运行cat.java里面的方法呀。

怎么让cat.java和dog.java里面的方法都跑起来呢?

简单,改一改testng.xml文件里面的配置就行了。

testng.xml修改后长这样

虽然我的dog.java和cat.java是不同的文件,但是testng才不管你在那个文件里面呢,只要加上下面这段它就能找到。

注意:com.qa.demo是java的包名,最好也要加上。

  1. <classes>
  2. <class name="com.qa.demo.Cat" />
  3. <class name="com.qa.demo.Mouse" />
  4. <class name="com.qa.demo.Dog" />
  5. </classes>

之后呢,也学习给把测试方法分组(groups),和给测试方法传递参数@parameters

Cat.java

  1. package com.qa.demo;
  2.  
  3. import org.testng.Assert;
  4. import org.testng.annotations.Parameters;
  5. import org.testng.annotations.Test;
  6.  
  7. public class Cat {
  8.  
  9. @Test(groups = { "GroupCatA" })
  10. public void testCat1() {
  11.  
  12. System.out.println("===Test 1 in Cat class of Cat.java===");
  13. try {
  14. Assert.assertEquals("White Cat", "Black cat", "Espected white cat, but find a balck cat.");
  15. System.out.println("======Assert will fail========");
  16. } catch (Error e) {
  17. System.out.println("======Cat Test 1=====Hello Kitty=======");
  18. System.out.println("======Cat Test 1=====Assertion Failed==");
  19. Assert.fail("===Cat Test 1 is Failed!=====");
  20. }
  21. }
  22.  
  23. @Test(groups = { "GroupCatA" })
  24. public void testCat2() {
  25.  
  26. System.out.println("===Test 2 in Cat class of Cat.java===");
  27.  
  28. }
  29.  
  30. @Parameters({ "p1", "p2" }) //要在testng.xml设置相应的标签和值
  31. @Test(groups = { "GroupCatB" })
  32. public void testCat3(int p1, int p2) {//p1,p2是@Parameters定义的参数名称
  33.  
  34. System.out.println("===Test 3 in Cat class of Cat.java===");
  35. int r = p1 * p2;
  36. System.out.println("P1 X P2=:" + r);
  37.  
  38. }
  39. }
  40.  
  41. class Mouse {
  42.  
  43. @Test(groups = { "GroupCatA" })
  44. public void testMouse1() {
  45.  
  46. System.out.println("===Test 1 in Mouse class of Cat.java===");
  47.  
  48. }
  49.  
  50. public void testMouse2() {
  51.  
  52. System.out.println("===Test 2 in Mouse class of Cat.java===");
  53.  
  54. }
  55.  
  56. public void testMouse3() {
  57.  
  58. System.out.println("===Test 3 in Mouse class of Cat.java===");
  59.  
  60. }
  61. }

Dog.java

  1. package com.qa.demo;
  2.  
  3. import org.testng.annotations.Test;
  4.  
  5. public class Dog {
  6.  
  7. @Test(groups = { "GroupCatA" })
  8. public void testDog1() {
  9. System.out.println("**********Dog in in another file********");
  10. System.out.println("===Test Dog 1===GroupCatA===");
  11.  
  12. }
  13.  
  14. @Test
  15. public void testDog2() {
  16.  
  17. System.out.println("==========Test Dog 2=============");
  18. }
  19.  
  20. }

这是testng.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
  3. <suite name="Suite" >
  4. <test thread-count="5" name="Test of cat">
  5. <parameter name="p1" value="3" /> <!--传递传输值给测试方法-->
  6. <parameter name="p2" value="9" /> <!--传递传输值给测试方法-->
  1. <groups> <run> <include name="GroupCatA" /> <include name="GroupCatB" /> </run> </groups> <classes> <class name="com.qa.demo.Cat" /> <class name="com.qa.demo.Mouse" /> <class name="com.qa.demo.Dog" /> </classes> </test> <!-- Test --> </suite> <!-- Suite -->

参考文章:

testng教程之testng.xml的配置和使用,以及参数传递

https://www.cnblogs.com/tobecrazy/p/4582173.html

关于Testng断言Assert

如果我们加了Assert,并且期待的值和实际值不一样的情况下,断言就是判定结果位错,同时还会报一大堆看着就不爽的error,注意是java.lang.error,不是exception哦。

同时断言还会阻断它后面其它语句的执行,比如,下面的Assert.assertEquals不加try-catch就会阻断他后面的system.out.println的执行。

  1. @Test(groups = { "GroupCatA" })
  2. public void testCat1() {
  3.  
  4. System.out.println("===Test 1 in Cat class of Cat.java===");
  5. try {
  6. Assert.assertEquals("White Cat", "Black cat", "Espected white cat, but find a balck cat.");
  7. System.out.println("======Assert will fail========");
  8. } catch (Error e) {
  9. System.out.println("======Cat Test 1=====Hello Kitty=======");
  10. System.out.println("======Cat Test 1=====Assertion Failed==");
  11. Assert.fail("===Cat Test 1 is Failed!=====");
  12. }
  13. }

那么怎么处理呢?加try-catch,把他抓住处理掉。

然后看到又老外(印度人)说有一个Softassert断言不会阻断后续语句的执行。

但是这个SoftAssert也不咋地,所以还是Try-Catch吧。

参考文章:

JAVA结合testng断言verify(断言失败不中断继续执行)
https://www.cnblogs.com/zhangfei/p/4450259.html

学习TestNG,乍暖还寒冷时的更多相关文章

  1. TestNG简单的学习-TestNG运行

    转载:http://topmanopensource.iteye.com/blog/1983735 TestNG简单的学习-TestNG运行 文档来自官方地址: http://testng.org/d ...

  2. 学习java窗口基本操作时无聊写的

    学习java窗口基本操作时无聊写的 就当记录 代码如下: package day08; import java.awt.BorderLayout;import java.awt.Color;impor ...

  3. 学习Spring5源码时所遇到的坑

    学习Spring5源码时所遇到的坑 0)本人下载的源码版本是 spring-framework-5.0.2.RELEASE 配置好gradle环境变量之后,cmd进入到spring项目,执行gradl ...

  4. 接口自动化学习--testNG

    一个月一更的节奏~ testNg是一个开源的自动化测试框架..具体那些什么特点的就不想打了- -,贴张图(虽然也看不懂): 学习网站:https://www.yiibai.com/testng 一样是 ...

  5. testng对失败时截图处理

    1.截图类: public class ScreenShot { public WebDriver driver; public ScreenShot(WebDriver driver) { this ...

  6. 学习angular 指令构造器时遇到的小问题

    在学习angular时,使用模块来为应用添加自己的指令时,遇到了一个问题,演示的代码如下: <!DOCTYPE html> <html> <head> <me ...

  7. 学习H5仿制网站时遇到的问题

    学习H5的第二周,开始仿制网站,在本过程中也发现了自己存在的更多问题. 1.TOP块:在制作top中,遇到的第一个问题,一旦top左右的背景色不同该怎样去调整 解决方式:建立两个div取代一个div ...

  8. 在学习linux基础入门时的一些问题总结(1)

    本周在实验楼完成了<linux基础入门>的21个实验,虽然之前已经学习过linux的相关课程,对linux下的命令也有一些了解和实践,但完成这21个实验以及35个练习题仍然遇到了许多的问题 ...

  9. 学习JavaScript一些资料时,记录一些规范小记

    最近工作不是很忙,所以再深入学学JavaScript,顺便提升一下自己,嘿嘿!主要记录一下学习到的一下编写代码的规范小记吧! 1.声明变量时一定带上var,避免一些错误发生,如变量提升时遇见的问题发生 ...

随机推荐

  1. sed指令的奇淫技巧

    查看某一个文件第5行和第10行sed -n '5,10p' filename 这样你就可以只查看文件的第5行到第10行. 查看某文件中指定第几行内容可以用sed -n '100{p;q}' filen ...

  2. 【git】之使用shell脚本提交代码

    为减少提交步骤,防止提交错误,使用Shell脚本进行git提交不失一件好事 #!/bin/sh # @author Hubal # @Email Hubal@123.com # @createBy - ...

  3. 知识点总结——STL相关(持续补充)

    ---恢复内容开始--- C++ STL 与ACM竞赛相关的应用 1.vector vector是动态数组,可以理解为是能够根据需要随时申请内存的动态数组. 常用操作如下: 容量 vec.size() ...

  4. jumpservice使用465端口发送邮件

    阿里云.华为云等云服务器默认屏蔽掉了25端口后,内网服务器如何通过跳板机发送邮件到外网邮箱. 如果是可联网的阿里云机器,可以直接配置mailx使用465端口发送邮件.需要进行ssl验证配置. Cent ...

  5. spark2.1源码分析3:spark-rpc如何实现将netty的Channel隐藏在inbox中

    class TransportServer bootstrap.childHandler(new ChannelInitializer<SocketChannel>() { @Overri ...

  6. 3DAY 用户管理

    0xff001用户/组管理 1.描述 用户和组: 系统上的每一个进程(运行程序)都是作为一个特定的用户运行的 每个文件都由特定的用户拥有 对文件和目录的访问受到用户的限制 与正在运行的进程相关联的用户 ...

  7. 错误 88 error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明) c:\program files (x86)\microsoft visual studio 9.0\vc\atlmfc\include\afxcoll.h 590

    最近接收了以前新公司遗留的代码,一个函数动不动就少的一千行,多的几千行,真是受不了这编码风格! 于是便使用了VS自带的重构工具,选择代码后右键-重构-提取方法,提取完方法就编译不过,想了好久原因,原来 ...

  8. 2018-2019-2 20175328李欣颖实验二《Java面向对象程序设计》实验报告

    2018-2019-2 20175328李欣颖实验二<Java面向对象程序设计>实验报告 面向对象程序设计-1 用程序解决问题时,要会写三种码: 1.伪代码 此处百分制转五分制: 如果成绩 ...

  9. 基于vue和svg的树形UI

      vue-svg-tree 基于vue和svg的动态树形UI 截图 应用 npm install vue-svg-tree 示例 <template> <div> <v ...

  10. Angular6 Observable.fromEvent error: “Invalid event target”

    今天在angular6项目中写了个拖拽功能,但是控制台报错,如图 后来在控制台打出发现,原来是 ngOnInit( ) 这个生命周期里,页面的dom节点还未产生,还只是null. 改为用 ngAfte ...