用java构建企业级自动化框架(多线程及结束语)

本文介绍了如何使用Java构建企业级自动化测试框架,重点讲解了如何结合多线程实现并发执行测试脚本。通过创建线程类BThread和监控线程BMonitorThread,实现了在固定线程池中并发运行测试用例,并在异常时自动截取屏幕图像。作者建议避免直接编写复杂的并发程序,推荐使用如ActiveMQ等工具来简化并发管理,同时强调了代码重用和框架设计的重要性。
摘要由CSDN通过智能技术生成

这个是我后来写的一本书,http://www.ituring.com.cn/minibook/10775。这个是我后来找到的自动化完美解决方案。


最后一章我们说下多线程,在前面我们已经说完如何分布式执行脚本,那在里面引入多线程并发执行case,也十分简单。

第一,我们创建一个线程类,构造器中传入要执行的脚本和要输出目录。在run方法体内让执行这个脚本。

public class BThread implements Runnable {
public BThread(String outputDir, BertTestCase bte){
    
}
    @Override
    public void run() {
        bte.execute();
        
    }

}

在外部我们写一个测试类来测试它。

    public static void main(String[] args) {
        ExecutorService exec = Executors.newFixedThreadPool(10);
        for(int i=0;i<list.size();i++){
            exec.execute(BThread(logputDir,list.getCase()));
        }
        exec.shutdown();
    }

}

这段代码意思很简单,首先我们构建一个最大数有10个线程的线程池,然后再线程池中运行分布式分发过来的脚本,脚本以10个为一批的运行。


后来客户提出需求,他希望程序失败的时候能自动截取当前屏幕图像。这点也很简单,在创建一个监听线程。

import org.apache.log4j.Logger;

public class BMonitorThread implements Runnable {
    private Logger log = null;
    private BertThread bThread = null;

    public BMonitorThread(BertThread t) {
        bThread = t;
    }

    @Override
    public void run() {
        try {
            bThread.start("");
        } catch (Exception ex) {
            log.error(this.getClass().getName() + "::  Exception in monitor thread -> ", ex);

        } finally {
            captureScreenShot();
        }

    }

    public void captureScreenShot() {
        // in this area use selenium captureScreen function
    }
}

那么我们外围测试类修改成这样就行了

    public static void main(String[] args) {
        ExecutorService exec = Executors.newFixedThreadPool(10);
        for(int i=0;i<list.size();i++){
            exec.execute(BMonitorThread(BThread(logputDir,list.getCase())));
        }
        exec.shutdown();
    }



好的,在项目中的基本并发情况说完,但是在实际中,我并不鼓励企业自己写并发程序,因为难以调试和把代码写正确。在之前一章用了ActiveMQ其实就是非常好的选择,他把所有的并发都自己实现了。我们主要调用就ok, 即使在本项目中,我也发现了多线程很多使用不当的地方,比如用ReentrantLock存在这没有正确释放锁的情况:既没遵守按照以下情况,这都是在代码中难以检测到的隐患。

lock.lock();try {

//coding

} finally {
            lock.unlock();
        }

后记

我在工作的这段日子里,也在反思和比较各种自动化框架的优缺点,我有个朋友在另一家公司做自动化,他告诉我他们的自动化框架有1.5G,原因是他们代码不能重用,所以代码越积越多。在项目开发中,一定要重视代码的重用,在我前面第一部分讲述的自动化语言中,没有提到代码的模板化调用。但是我们在开发框架中要想到这一层,可以写脚本模板供别的脚本调用。


最后再总结下自动化框架,

一,一定要开发好供使用者容易调用的语言。

二,log管理,输出你指定格式的记录,你如果在此架设上一个BI图表系统专门用来分析管理报告那就更好。

三,测试脚本的管理,什么时候运行哪批次脚本。

四,低次分布式任务处理系统。让任务能分配到好多台机器上执行。如果你机器吞吐量不够可以加上并发执行功能。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值