java测试用例模板和例子(怎么给javaWeb项目写测试用例)

本文目录
- 怎么给javaWeb项目写测试用例
- 想快速又简单地编写测试用例看这里!
- JAVA模拟生产者与消费者实例
- java ireport 报表打印测试用例怎么写啊毕业论文
- java测试用例的编写 能否举个简单的例子呢【疑问】 其他编程语言的测试用例是如何编写的 测
怎么给javaWeb项目写测试用例
文件名:Calutor.java
package com.sc.zy;
public class Calutor {
public int add(int num1,int num2){
return num1+num2;
}
public int sub(int num1,int num2){
return num1-num2;
}
public int mul(int num1,int num2){
return num1*num2;
}
public int div(int num1,int num2){
if(num2==0){
throw new MyException();
}
return num1/num2;
}
}
文件名:MyException.Java
package com.sc.zy;
public class MyException extends RuntimeException {
}
文件名:CalutorTest.java
package com.sc.zy;
import junit.framework.Assert;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
public class CalutorTest {
private Calutor c;
@BeforeClass
public static void setUpBeforeClass(){
System.out.println("=====static init=======");
}
@AfterClass
public static void tearDownAfterClass(){
System.out.println("=====static destory=======");
}
@Before
public void setUp(){
System.out.println("=======@before=======");
c=new Calutor();
}
@After
public void tearDown(){
System.out.println("=======@after=======");
}
@Test
public void testAdd(){
int sum=c.add(1, 2);
Assert.assertEquals(3, sum);
}
@Test(expected=com.sc.zy.MyException.class)
public void testDiv(){
c.div(1, 0);
}
@Ignore
public void testDiv1(){
int d=c.div(1, 5);
Assert.assertEquals(0, d);
}
}
想快速又简单地编写测试用例看这里!
本文适用对象
初级软件测试人员,或想开拓思路拓展测试范围、提高测试覆盖率的所有测试人员等等。
本文目的
讲述如何快速、简单、有效、有条理地编写一条测试用例,并帮助测试人员从测试用例角度拓展测试思路。
如何简单、快速地
描述(编写)一个测试用例
测试用例的目的在于指导、帮助测试人员按照既定的计划步骤执行测试,并比对测试结果与预期结果是否一致。
对于中大型软件公司而言,测试用例的管理都有既定的规范和工具,如表格管理用例、测试管理软件管理用例(如下图1所示为MeterSphere测试管理软件用例编写页面)等。
但总而言之,测试用例的内容主要不外乎3个部分:前置条件、步骤、预期结果。
那么,对于没有明确地测试管理软件的小型软件公司,或者对于测试人员而言,需要暂时快速地编写一个测试用例或记录测试过程的时候,可以怎么做呢?
推荐一个临时性的用例编写模板:GIVEN...WHEN…THEN。
让我们套用GIVEN…WHEN…THEN的模式来描述下编写用例的大致步骤:
有没有觉得很简单?
***隐藏网址***
使用GIVEN…WHEN…THEN能够简单呈现用例前置条件、执行步骤和预期结果间的逻辑关系,并能清晰地表述一个用例。
那么,什么地方可以用GIVEN…WHEN..THEN这个模板呢?这个模板较之文档用例更为简洁,如下图2所示,对于测试用例提交故障,阐述引发故障的操作方法或故障复现方法,以及故障修复后的验证时都可以使用。
如何使用探索式场景联想法
衍生测试用例
探索式测试更多的是一种测试风格和测试思想,要求测试人员在测试过程中不断思考、发散思维,记录、修改和更新测试方法和测试用例。
场景法则是要求测试人员认真分析测试需求,了解用户使用场景,根据不同的场景进行测试。
而本文讨论的 探索式场景联想法,则是将探索式测试方法、场景法和联想法相结合,在已有测试用例的基础上衍生更多的测试用例。
那么,如何使用探索式场景联想法衍生测试用例呢?
由上一节可知,测试用例是指导测试人员在xx预知条件(场景)下,执行xx步骤,预期得到xx结论。
显而可见,通过改变测试用例的预知条件和操作步骤,则可以衍生出不同的测试用例。而这些测试用例包含不同的测试场景和不同的测试步骤。
如下图3所示,为探索式场景联想法衍生测试用例的结构脑图。
改变前置条件
测试用例的前置条件基本包括:硬件资源和软件系统两个部分。
改变前置条件可以从这几方面入手。
***隐藏网址***
由此,衍生的部分测试用例可如下所示:
改变操作步骤
改变用例操作步骤可以从以下几方面入手:插入步骤、删除步骤、改变步骤和重复步骤。
插入步骤
如图3所示,插入步骤又可以分为插入相关联步骤和不相关联步骤。并在插入步骤中增加用户输入。
同样以用例1为例,插入步骤衍生的测试用例可如下:
删除步骤
删除步骤可以分为删除部分步骤或者删除部分步骤中的部分操作。删除部分步骤,又可以分为删除关键步骤和非关键步骤。
例如,以例1为例,删除关键步骤“点击键盘回车键“衍生新的测试用例如下所示:
改变步骤
改变步骤主要涉及步骤顺序的改变和步骤内容的改变。当测试用例具有多个步骤,且步骤间具有关联性和顺序性的时候,改变步骤顺序则会变得很有意义。改变步骤内容主要是改变步骤中用户的输入(包括数据输入、用户操作等)。
以用例1为例,改变步骤内容衍生的用例如下所示:
重复步骤
对于大多测试人员来说,衍生测试用例时更多关注点在于操作步骤的变化。
但是,对于不同的测试场景,重复相同的测试步骤,仍然具有很大的测试意义。重复步骤进行测试能够挖掘不同前置条件(场景)下的故障,亦能挖掘软件在多个重复步骤操作下潜藏的故障。
以用例1为例,重复步骤衍生的用例如下所示:
测试结论衍生测试用例
除了通过改变前置条件和操作步骤衍生测试用例外,还可以根据测试结论中的异常信息,逆推测试场景,衍生新的测试用例。
这个部分更多的需要测试人员掌握探索式测试方法,对测试过程中的软件资源监控信息、错误日志等保持警惕性,挖掘错误信息中的内容,逆推产生错误信息的原因,构建新的测试用例。
小结
本文阐述了一种可以在提交测试故障信息和验证测试故障时使用的快速测试用例编写模板,快速记录测试场景、测试步骤等关键信息。
并在此基础上,简单讲解了基于探索式场景联想法的测试用例衍生方法,可以帮助测试人员借助已有的测试用例拓展新的测试用例,扩大测试范围,提高覆盖率,挖掘更多场景下的软件故障。
***隐藏网址***
JAVA模拟生产者与消费者实例
使用的生产者和消费者模型具有如下特点:
(1)本实验的多个缓冲区不是环形循环的,也不要求按顺序访问。生产者可以把产品放到目前某一个空缓冲区中。
(2)消费者只消费指定生产者的产品。
(3)在测试用例文件中指定了所有的生产和消费的需求,只有当共享缓冲区的数据满足了所有关于它的消费需求后,此共享缓冲区才可以作为空闲空间允许新的生产者使用。
(4)本实验在为生产者分配缓冲区时各生产者间必须互斥,此后各个生产者的具体生产活动可以并发。而消费者之间只有在对同一产品进行消费时才需要互斥,同时它们在消费过程结束时需要判断该消费对象是否已经消费完毕并清除该产品。
Windows
用来实现同步和互斥的实体。在Windows
中,常见的同步对象有:信号量(Semaphore)、
互斥量(Mutex)、临界段(CriticalSection)和事件(Event)等。本程序中用到了前三个。使用这些对象都分
为三个步骤,一是创建或者初始化:接着请求该同步对象,随即进入临界区,这一步对应于互斥量的
上锁;最后释放该同步对象,这对应于互斥量的解锁。这些同步对象在一个线程中创建,在其他线程
中都可以使用,从而实现同步互斥。当然,在进程间使用这些同步对象实现同步的方法是类似的。
1.用锁操作原语实现互斥
为解决进程互斥进人临界区的问题,可为每类临界区设置一把锁,该锁有打开和关闭两种状态,进程执行临界区程序的操作按下列步骤进行:
①关锁。先检查锁的状态,如为关闭状态,则等待其打开;如已打开了,则将其关闭,继续执行步骤②的操作。
②执行临界区程序。
③开锁。将锁打开,退出临界区。
2.信号量及WAIT,SIGNAL操作原语
信号量的初值可以由系统根据资源情况和使用需要来确定。在初始条件下信号量的指针项可以置为0,表示队列为空。信号量在使用过程中它的值是可变的,但只能由WAIT,SIGNAL操作来改变。设信号量为S,对S的WAIT操作记为WAIT(S),对它的SIGNAL操作记为SIGNAL(S)。
WAIT(S):顺序执行以下两个动作:
①信号量的值减1,即S=S-1;
②如果S≥0,则该进程继续执行;
如果
S(0,则把该进程的状态置为阻塞态,把相应的WAITCB连人该信号量队列的末尾,并放弃处理机,进行等待(直至其它进程在S上执行SIGNAL操作,把它释放出来为止)。
SIGNAL(S):顺序执行以下两个动作
①S值加
1,即
S=S+1;
②如果S)0,则该进程继续运行;
如果S(0则释放信号量队列上的第一个PCB(既信号量指针项所指向的PCB)所对应的进程(把阻塞态改为就绪态),执行SIGNAL操作的进程继续运行。
在具体实现时注意,WAIT,SIGNAL操作都应作为一个整体实施,不允许分割或相互穿插执行。也就是说,WAIT,SIGNAL操作各自都好像对应一条指令,需要不间断地做下去,否则会造成混乱。
从物理概念上讲,信号量S)时,S值表示可用资源的数量。执行一次WAIT操作意味着请求分配一个单位资源,因此S值减1;当S《0时,表示已无可用资源,请求者必须等待别的进程释放了该类资源,它才能运行下去。所以它要排队。而执行一次SIGNAL操作意味着释放一个单位资源,因此S值加1;若S(0时,表示有某些进程正在等待该资源,因而要把队列头上的进程唤醒,释放资源的进程总是可以运行下去的。
---------------
/**
*
生产者
*
*/
public
class
Producer
implements
Runnable{
private
Semaphore
mutex,full,empty;
private
Buffer
buf;
String
name;
public
Producer(String
name,Semaphore
mutex,Semaphore
full,Semaphore
empty,Buffer
buf){
this.mutex
=
mutex;
this.full
=
full;
this.empty
=
empty;
this.buf
=
buf;
this.name
=
name;
}
public
void
run(){
while(true){
empty.p();
mutex.p();
System.out.println(name+"
inserts
a
new
product
into
"+buf.nextEmptyIndex);
buf.nextEmptyIndex
=
(buf.nextEmptyIndex+1)%buf.size;
mutex.v();
full.v();
try
{
Thread.sleep(1000);
}
catch
(InterruptedException
e)
{
e.printStackTrace();
}
}
}
}
---------------
/**
*
消费者
*
*/
public
class
Customer
implements
Runnable{
private
Semaphore
mutex,full,empty;
private
Buffer
buf;
String
name;
public
Customer(String
name,Semaphore
mutex,Semaphore
full,Semaphore
empty,Buffer
buf){
this.mutex
=
mutex;
this.full
=
full;
this.empty
=
empty;
this.buf
=
buf;
this.name
=
name;
}
public
void
run(){
while(true){
full.p();
mutex.p();
System.out.println(name+"
gets
a
product
from
"+buf.nextFullIndex);
buf.nextFullIndex
=
(buf.nextFullIndex+1)%buf.size;
mutex.v();
empty.v();
try
{
Thread.sleep(1000);
}
catch
(InterruptedException
e)
{
e.printStackTrace();
}
}
}
}
-------------------------
/**
*
缓冲区
*
*/
public
class
Buffer{
public
Buffer(int
size,int
nextEmpty,int
nextFull){
this.nextEmptyIndex
=
nextEmpty;
this.nextFullIndex
=
nextFull;
this.size
=
size;
}
public
int
size;
public
int
nextEmptyIndex;
public
int
nextFullIndex;
}
-----------------
/**
*
此类用来模拟信号量
*
*/
public
class
Semaphore{
private
int
semValue;
public
Semaphore(int
semValue){
this.semValue
=
semValue;
}
public
synchronized
void
p(){
semValue--;
if(semValue《0){
try
{
this.wait();
}
catch
(InterruptedException
e)
{
e.printStackTrace();
}
}
}
public
synchronized
void
v(){
semValue++;
if(semValue《=0){
this.notify();
}
}
}
------------------------
public
class
Test
extends
Thread
{
public
static
void
main(String
args)
{
Buffer
bf=new
Buffer(10,0,0);
Semaphore
mutex=new
Semaphore(1);
Semaphore
full=new
Semaphore(0);
Semaphore
empty=new
Semaphore(10);
//new
Thread(new
Producer("p001",mutex,full,empty,bf)).start();
Producer
p=new
Producer("p001",mutex,full,empty,bf);
new
Thread(new
Producer("p002",mutex,full,empty,bf)).start();
new
Thread(new
Producer("p003",mutex,full,empty,bf)).start();
new
Thread(new
Producer("p004",mutex,full,empty,bf)).start();
new
Thread(new
Producer("p005",mutex,full,empty,bf)).start();
try{
sleep(3000);
}
catch(Exception
ex)
{
ex.printStackTrace();
}
new
Thread(new
Customer("c001",mutex,full,empty,bf)).start();
new
Thread(new
Customer("c002",mutex,full,empty,bf)).start();
new
Thread(new
Customer("c003",mutex,full,empty,bf)).start();
new
Thread(new
Customer("c004",mutex,full,empty,bf)).start();
new
Thread(new
Customer("c005",mutex,full,empty,bf)).start();
}
}
--------------------------------------------
java ireport 报表打印测试用例怎么写啊毕业论文
我的程序里的一个调用的例子,以pdf格式输出到了客户浏览器
Connection con = null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
con = java.sql.DriverManager.getConnection("jdbc:oracle:thin:@20.22.123.160:1521:orcl","hp","hp");
}
catch( SQLException e){
e.printStackTrace();
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
try{
byte bytes=JasperRunManager.runReportToPdf("report5.jasper",null,con);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream outStream = response.getOutputStream();
outStream.write(bytes,0,bytes.length);
outStream.flush();
outStream.close();
con.close();
}catch(JRException e){
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
如果本地的话,参考下面的
byte bytes=JasperRunManager.runReportToPdf("report5.jasper",null,con);
//写入到本地文件,,测试
FileOutputStream fos=null;
try{
fos=new FileOutputStream("test.pdf",true);
fos.write(bytes);
fos.flush();
}
catch(Exception e){
e.printStackTrace();
System.out.println("写byte数组出错:"+e.getMessage());
}
finally{
try{
fos.close();
}
catch(IOException iex){}
}
java测试用例的编写 能否举个简单的例子呢【疑问】 其他编程语言的测试用例是如何编写的 测
比如对于你写的一个函数方法
int foo(int in){ return in+1;}
你就写代码测试他会不会产生预想中的结果。
if(foo(5)!=6) throw new Exception("foo函数测试错误");
对于复杂的运算还要多测几种情况。如果都通过了,就对了。
通常,测试框架用assert语句来简化这个抛异常的过程...

更多文章:
avantage怎么设置为中文(Avantage安装丢失GIT)
2026年10月15日 03:00
activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)
2026年10月14日 20:30
excel连接sql数据库教程(excel怎么连接sql数据库)
2026年10月14日 19:40






