java_day01_api_testng_01

(1)testng一款单元测试框架,也可以用来做自动化,比junit强大
(2) testng安装
1.离线安装
2.在线安装

硬性要求:JDK1.7以上版本、Eclipse4.2以上版本。

安装参考:https://blog.csdn.net/kdyyh/article/details/78483663

eclispe下载:https://www.eclipse.org/downloads/packages/
但是安装了新版本:testng还是安装失败【离线,在线都不ok】---解决办法:

http://beust.com/eclipse这个网址已经失效了,所以更换成下面地址在尝试在线安装,结果成功了

http://dl.bintray.com/testng-team/testng-eclipse-release/------------如何找到这个网址:访问下面的链接:
https://testng.org/doc/eclipse.html#eclipse-installation----------点击这个即可It has its own project repository called testng-eclipse).--------跳转到github-----可以看到有很多参考的site

(3)testng坐标导入

  坐标版本不能超过按装好的testng插件版本

上面是对testng简单介绍,下面开始创建maven项目:

  1. file->new->project->搜索maven->maven project->勾选create a simple project->点击next

填写下面2项即可

Group Id:com.lemon

Artifact Id: java_api_day01

点击finish

3)working sets管理项目【为了方便管理项目,起到收藏的效果,当然不设置也可以】

new->other->搜索Java Working Set->输入Working set name->Workspace content选择要加入到Working set name的项目,点击add->点击finish->点击倒三角view menu,切换视图->Top level element->默认是以project置顶,这里我们选择Working sets

可以看到api里面的项目全部置顶

4)添加testng的maven坐标

https://mvnrepository.com/

搜索:testng

选择Usages数据量比较大的,找到坐标,如下图示例:

 <!-- https://mvnrepository.com/artifact/org.testng/testng -->

<dependency>
 
    <groupId>org.testng</groupId>
 
     <artifactId>testng</artifactId>
 
     <version>6.14.3</version>
 
     <scope>test</scope>
 
 </dependency>

将找到的坐标,copy到pom.xml文件中

pom.xml文件如下:加粗部分即是testng坐标【以后所有的依赖都要放在<dependencies></dependencies>中】

 <project xmlns="http://maven.apache.org/POM/4.0.0"
 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

 <modelVersion>4.0.0</modelVersion>
 
 <groupId>com.lemon</groupId>
 
 <artifactId>java_day01_api</artifactId>

 <version>0.0.1-SNAPSHOT</version>

<dependencies>

<!-- https://mvnrepository.com/artifact/org.testng/testng -->
> 
**<dependency>

<groupId>org.testng</groupId>

<artifactId>testng</artifactId>
<version>6.14.3</version>

<scope>test</scope>
</dependency>**
       </dependencies>
 
 </project>

5)如何使用testng

1)测试 类

1.编写测试类
2.用@Test这个测试注解来标识测试方法
3.在测试方法中实现测试逻辑,拿到实际测试结果,跟期望值进行比较

4.执行测试方法

src/test/java下面创建TestNgDemo.java

1)先创建包

new->Package

输入包名:com.lemon.testng

2)在创建类

new->Class
输入类名:TestNgDemo
点击finish

3) TestNgDemo.java代码如下:

  1. 不加注解

package com.lemon.testng;

public class TestNgDemo {

// 不需要再写main方法了,程序的入口testng框架已经帮我们写好了

public void test() {

System.out.println("这是一个测试方法");
}
public void test2() {
System.out.println("这是一个不会被执行的方法");
}
}

执行上面代码:

右键Run as->无java application 选项【因为没有找到程序的入口】也无TestNG test选项【因为没有注解,testng无法识别】,无法运行程序

2.加注解

 package com.lemon.testng;
 
 import org.testng.annotations.Test;
 
 public class TestNgDemo {

 // 不需要再写main方法了,程序的入口testng框架已经帮我们写好了

// 1.@Test是注解
 
 // 2.testng框架能够识别@Test注解,@Test注解用来标识该方法是一个testng测试方法
 
 @Test
 
 public void test() {
 
 System.out.println("这是一个测试方法");
 
 }
 
 @Test
 
 public void fuction() {
 
 System.out.println("这是第二个被执行的方法");
 
 }
 @Test
 
 public void  exec() {

System.out.println("这是第三个被执行的方法");
 
}

 public void a() {
 
 System.out.println("这是一个不会被执行的方法");
 
    }
 }

有了注解,testng才能识别(注解就相当于是入口)

执行上面代码:
右键Run as->TestNg test【加注解就会有这个选项】

执行结果:

 [RemoteTestNG] detected TestNG version 6.9.9
 
 [TestNG] Running:
 
   C:\Users\USER\AppData\Local\Temp\testng-eclipse-258025461\testng-customsuite.xml
 
 这是第三个被执行的方法
 这是第二个被执行的方法

 这是一个测试方法
 
 PASSED: exec
 
 PASSED: fuction
 
 PASSED: test
 
 ===============================================

     Default test
 
     Tests run: 3, Failures: 0, Skips: 0
 
===============================================
 
 ===============================================
 
 Default suite
 
 Total tests run: 3, Failures: 0, Skips: 0
 
 ===============================================

 [TestNG] Time taken by org.testng.reporters.JUnitReportReporter@e580929: 10 ms> 
 [TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@5e025e70: 36 ms
 
 [TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms
 
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@2d209079: 9 ms
 
 [TestNG] Time taken by org.testng.reporters.jq.Main@66d33a: 58 ms
 
 [TestNG] Time taken by org.testng.reporters.XMLReporter@3cb5cdba: 5 ms

从执行结果可以看出:a()这个方法没有被执行【如果要被执行:再加一个注解@Test即可】

上面方法的执行顺序:是按照方法名的首字母字典顺序执行的

3.断言类

assert.assertEquals(实际值, 期望值);

package com.lemon.testng;
import org.testng.annotations.Test;

import junit.framework.Assert;

public class TestNgDemo {
    // 不需要再写main方法了,程序的入口testng框架已经帮我们写好了
    // 1.@Test是注解
    // 2.testng框架能够识别@Test注解,@Test注解用来标识该方法是一个testng测试方法

    @Test
    public void test() {
        System.out.println("这是一个测试方法");
    }

    @Test
    public void test2() {
        //assert.assertEquals(actual, expected);
        //assert.assertEquals(实际值, 期望值);
        Assert.assertEquals(true ,false);
    }

    @Test
    public void test3() {
        //assert.assertEquals(actual, expected);
        Assert.assertEquals(2,2);
    }

}


上面代码执行结果如下:

[RemoteTestNG] detected TestNG version 6.9.9
[TestNG] Running:
  C:\Users\USER\AppData\Local\Temp\testng-eclipse-1596998653\testng-customsuite.xml

这是一个测试方法
PASSED: test
PASSED: test3
FAILED: test2
junit.framework.AssertionFailedError: expected:<true> but was:<false>
    at junit.framework.Assert.fail(Assert.java:50)
    at junit.framework.Assert.failNotEquals(Assert.java:287)
    at junit.framework.Assert.assertEquals(Assert.java:67)
    at junit.framework.Assert.assertEquals(Assert.java:147)
    at junit.framework.Assert.assertEquals(Assert.java:153)
    at com.lemon.testng.TestNgDemo.test2(TestNgDemo.java:20)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:639)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:816)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1124)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
    at org.testng.TestRunner.privateRun(TestRunner.java:774)
    at org.testng.TestRunner.run(TestRunner.java:624)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
    at org.testng.SuiteRunner.run(SuiteRunner.java:261)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
    at org.testng.TestNG.run(TestNG.java:1048)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)


===============================================
    Default test
    Tests run: 3, Failures: 1, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 3, Failures: 1, Skips: 0
===============================================

[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@e580929: 11 ms
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@5e025e70: 49 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 10 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@2d209079: 10 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@66d33a: 48 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@3cb5cdba: 8 ms

  1. 配置文件-测试套件
    suite元素:测试套件(测试集合)----可以理解成项目【只能有有一个】
    test元素:测试模块----可以理解为功能模块【模块可以有多个】
    classes:测试类集合
    class :测试类路径-----包名+类名【你要测试的测试类,也可以有多个】
    在项目的根目录底下创建testng.xm
    一个suite(套件)由一个或多个测试模块构成
    一个test(测试)由多个类组成

如何快捷复制测试类路径:
1 打开你的测试类即java文件,在类名上右键>copy>Copy Qualified Name
2 打开testng.xml文件,copy到 <class name="com.lemon.testng.TestNgDemo"/>
3 如何测试copy的全类名是否正确,按住ctrl键,光标放在com.lemon.testng.TestNgDemo上面,如果出现小手,点击可以动态跳到TestNgDemo文件,说明copy的全类名正确
如何修改xml的字体大小:
windows->Preference->搜索font
找到 Structured Text Editor 此项是用来修改xml文件的字体

testng.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<suite name="项目名" parallel="false">
 <test name="功能模块">
   <classes>
     <class  name="com.lemon.testng.TestNgDemo"/>
    </classes>
 </test>
  <test name="功能模块2">
   <classes>
     <class  name="com.lemon.testng.TestNgDemo2"/>
    </classes>
 </test>
</suite>

执行:【注意:是在文件上运行,不是打开文件在文件里面执行】
在testng.xml文件上右键,Run as->TestNG suite
运行结果:


image.png

上图乱码如何解决:
找到eclipse的安装路径下的eclipse.ini文件,在最后一行加入-Dfile.encoding=UTF-8
重启Eclipse
再次运行:


image.png

发现控制台不乱码了,但是java文件里面又出现乱码了-------原因:修改编码之前用的是gbk编码,所以修改成UTF-8又乱码了---前后编码不一致-----解决:删除乱码,重新写入即可---重新写入的不会乱码

另:
1 testng.xml也可以自动生成【一般不推荐】
方法:
1 在项目名上,右键new->other->搜索TestNG->点击TestNG class
Sourec folder: \java_day01_api\src\test\java ----项目的默认路径
Package Name: ----如果不填,点击finish会生成一个默认包
class name: New Test ----默认生成一个测试类文件

Xml suite file: 这里输入你的xml文件名
点击finish
则在\java_day01_api\src\test\java 路径下生成2个文件:
1 New Test.java
2 xml文件

2 testng插件也可以不用安装,直接引用jar包也是可以用的,但是如果不安装插件,执行套件没有TestNG suit,只能通过命令来执行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351