java实现串口ymodem 传输文件_活久见!Jmeter也能实现文件传输和发送邮件啦

Jmeter实现文件处理和邮件发送

Jmeter除了支持Http协议以外,还支持多种其他协议,包括FTP协议和SMTP/POP3协议,可以用于文件上传下载和邮件发送。Jmeter内置FTP Sampler,可以很方便的实现FTP文件上传下载。

Jmeter上传FTP文件

新建Jmeter脚本,在线程组下添加FTP请求,在其中填写:

• FTP服务器IP

• 上传的远程文件路径

• 上传的本地文件路径

• FTP请求模式:此处必须选择PUT,PUT代表上传,GET代表下载

• FTP服务器的登录信息

2840c11b32e7371c04aba2cda29eb169.png

Jmeter下载FTP文件

下载文件也通过Jmeter内置的FTP Sampler来实现,此时的信息和上传信息几乎一致,除了FTP请求模式需要用POST变更为GET

b1d1a3a3ada669bc15a8783e7b17f87d.png
417725a413ca58818a020cf51e4ae079.png

运行脚本,查看结果树中会显示上传下载信息,并且可以在本地和FTP服务器上看到更新后的文件信息。Jmeter可以上传新的文件,也可以覆盖旧有文件;除了可以上传下载文本文件以外,还可以上传下载视频,音频等文件。

7d5f58e9e232411e00cd9cb00e3c24c4.gif

Jmeter通过内置的SMTP Sampler和Mail Reader Sampler可以实现邮件的发送和接受。

• SMTP Sampler是基于SMTP协议实现的,SMTP是一种可靠且有效的电子邮件传输协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。

• Jmeter Mail Reader Sampler支持多种邮件接受协议,包括POP3和IMAP。POP3,全名为“Post Office Protocol - Version 3”,协议主要用于支持使用客户端远程管理在服务器上的电子邮件。IMAP(Internet Mail Access Protocol)是斯坦福大学在1986年开发的一种邮件获取协议,它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。

在使用Jmeter接受和发送邮件之前,首先需要有邮件服务,我们可以使用邮箱的邮件服务,以QQ邮箱为例,可以开通QQ邮箱的SMTP和POP3服务:

059d69570b6a037e4312a1d6269ffebf.png

SMTP Sampler发送邮件

Jmeter SMTP Sampler可以实现基本的邮件发送功能,它可以发送带附件的文本内容,但是不支持HTML格式的邮件发送。新建脚本->线程组->SMTP Sampler,在其中填写如下信息即可实现邮件发送:

• SMTP服务器和连接信息

• 收件人信息

• 邮件信息(邮件头,邮件体,携带附件)

685c18d59c6b572eb85b2c7c7b1ebde5.png

运行脚本后查收邮箱,能够看到Jmeter发送的邮件信息:

7b8cf2e77bd9b11fcbde3dc7eff77971.png

Mail Reader Sampler接收邮件

Jmeter Mail Reader Sampler用于接收邮件,它支持多种邮件接收协议,按如下所示信息填写即可模拟客户端接受邮件信息:

53108da7bbdbd2e5cbe0885a4838fb06.png

运行脚本,通过查看结果树即可看到邮件详情

1b17e710edf48f30af23afb9d55c1f62.png

作  者:Testfan Kitty

出  处:微信公众号:自动化软件测试平台

版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以使用串口通讯库来实现Ymodem传输文件。以下是一个简单的示例代码: ```java import java.io.*; import java.util.*; import purejavacomm.*; public class YModem { private static final byte SOH = 0x01; private static final byte STX = 0x02; private static final byte EOT = 0x04; private static final byte ACK = 0x06; private static final byte NAK = 0x15; private static final byte CAN = 0x18; private static final byte CRC16 = 0x43; private static final int BLOCK_SIZE = 1024; private static final int MAX_RETRIES = 10; private static final int FILE_SIZE_OFFSET = 132; private static final int FILE_SIZE_LENGTH = 10; private static final int FILE_NAME_OFFSET = 0; private static final int FILE_NAME_LENGTH = 128; public static void send(String fileName, OutputStream outputStream) throws Exception { File file = new File(fileName); FileInputStream fileInputStream = new FileInputStream(file); long fileSize = file.length(); byte[] fileNameBytes = Arrays.copyOf(file.getName().getBytes("ASCII"), FILE_NAME_LENGTH); byte[] fileSizeBytes = Arrays.copyOf(Long.toString(fileSize).getBytes("ASCII"), FILE_SIZE_LENGTH); int blockNumber = 1; int retries = 0; while (true) { outputStream.write(NAK); int bytesRead = fileInputStream.read(); if (bytesRead != SOH) { throw new Exception("Invalid start of header"); } int blockIndex = 0; byte[] block = new byte[BLOCK_SIZE + 4]; block[blockIndex++] = SOH; block[blockIndex++] = (byte) blockNumber; block[blockIndex++] = (byte) ~blockNumber; bytesRead = fileInputStream.read(block, blockIndex, BLOCK_SIZE); if (bytesRead < BLOCK_SIZE) { Arrays.fill(block, blockIndex + bytesRead, blockIndex + BLOCK_SIZE, (byte) 0x1A); } int crc = calculateCRC16(block, 3, BLOCK_SIZE); block[blockIndex + BLOCK_SIZE] = (byte) ((crc >> 8) & 0xFF); block[blockIndex + BLOCK_SIZE + 1] = (byte) (crc & 0xFF); outputStream.write(block); int response = readByte(inputStream); if (response == ACK) { blockNumber++; if (blockNumber == 256) { blockNumber = 0; } retries = 0; if (bytesRead < BLOCK_SIZE) { break; } } else if (response == NAK) { retries++; if (retries >= MAX_RETRIES) { throw new Exception("Transfer failed"); } } else { throw new Exception("Invalid response: " + response); } } fileInputStream.close(); while (true) { outputStream.write(EOT); int response = readByte(inputStream); if (response == NAK) { continue; } else if (response == ACK) { break; } else { throw new Exception("Invalid response: " + response); } } } public static void receive(String fileName, InputStream inputStream) throws Exception { FileOutputStream fileOutputStream = new FileOutputStream(fileName); byte[] block = new byte[BLOCK_SIZE + 4]; int blockNumber = 1; int retries = 0; boolean endOfFile = false; while (!endOfFile) { block[0] = (byte) inputStream.read(); if (block[0] == EOT) { outputStream.write(ACK); break; } else if (block[0] != SOH && block[0] != STX) { throw new Exception("Invalid start of header"); } int bytesRead = inputStream.read(block, 1, BLOCK_SIZE + 3); if (bytesRead < BLOCK_SIZE + 3) { throw new Exception("Invalid block size"); } int crc = calculateCRC16(block, 3, BLOCK_SIZE); if (crc != ((block[BLOCK_SIZE + 3] << 8) | (block[BLOCK_SIZE + 2] & 0xFF))) { throw new Exception("Invalid CRC"); } if (blockNumber == block[1] && ~blockNumber == block[2]) { retries = 0; fileOutputStream.write(block, 3, BLOCK_SIZE); outputStream.write(ACK); blockNumber++; if (blockNumber == 256) { blockNumber = 0; } } else if (blockNumber == ((block[1] + 1) & 0xFF) && ~(blockNumber) == block[2]) { retries = 0; endOfFile = true; int bytesToWrite = 0; for (int i = 0; i < FILE_SIZE_LENGTH; i++) { if (fileSizeBytes[i] == 0) { break; } bytesToWrite = bytesToWrite * 10 + (fileSizeBytes[i] - '0'); } fileOutputStream.write(block, 3, bytesToWrite); outputStream.write(ACK); } else { retries++; if (retries >= MAX_RETRIES) { throw new Exception("Transfer failed"); } outputStream.write(NAK); } } fileOutputStream.close(); } private static int calculateCRC16(byte[] data, int offset, int length) { int crc = 0; for (int i = offset; i < offset + length; i++) { crc ^= (data[i] & 0xFF) << 8; for (int j = 0; j < 8; j++) { if ((crc & 0x8000) != 0) { crc = (crc << 1) ^ 0x1021; } else { crc <<= 1; } } } return crc & 0xFFFF; } private static int readByte(InputStream inputStream) throws Exception { long startTime = System.currentTimeMillis(); while (inputStream.available() == 0) { if (System.currentTimeMillis() - startTime > 10000) { throw new Exception("Timeout waiting for response"); } } return inputStream.read(); } } ``` 在这个示例代码中,send()方法用于发送文件,而receive()方法用于接收文件。如果您使用的是Windows系统,则需要安装Java Communications API(JavaComm)来使用串口通讯库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值