
插件介绍
HTTP测试工具包是一个专为Flutter-OpenHarmony跨平台开发设计的HTTP客户端测试框架,它提供了完整的HTTP请求/响应处理能力,包括模拟客户端、多部分表单上传、流式请求处理和请求重试机制等功能。该工具包可以帮助开发者在OpenHarmony平台上高效地进行网络相关的单元测试和集成测试,无需依赖真实网络环境。
主要功能特性:
- 支持基本HTTP请求(GET、POST、PUT、DELETE等)
- 提供MockClient模拟HTTP响应,方便单元测试
- 支持多部分表单数据(Multipart)上传
- 支持流式请求和响应处理
- 内置请求重试机制
- 完整的请求/响应头处理
- 支持OpenHarmony平台特性
环境设置
在使用HTTP测试工具包之前,需要确保开发环境满足以下要求:
Flutter环境要求
- Flutter SDK版本:≥2.19.6
- Dart SDK版本:≥2.19.6
OpenHarmony环境要求
- OpenHarmony SDK API版本:≥9
- DevEco Studio版本:≥3.0
网络权限配置
在OpenHarmony项目中,需要在module.json5文件中添加网络访问权限:
json
{
"module": {
"requestPermissions": [
{
"name": "ohos.permission.INTERNET"
}
]
}
}
依赖引入
HTTP测试工具包需要通过AtomGit以git形式引入。在项目的pubspec.yaml文件中添加以下依赖配置:
yaml
dependencies:
flutter:
sdk: flutter
http:
git:
url: "https://atomgit.com/openharmony-tpc/flutter_packages.git"
path: "packages/http"
stream_channel: 2.1.1
fake_async: 1.3.1
添加完依赖后,执行以下命令获取依赖:
bash
flutter pub get
API调用与使用示例
1. 基本HTTP请求
GET请求
dart
import 'package:http/http.dart' as http;
import 'package:flutter/material.dart';
class ExamplePage extends StatefulWidget {
const ExamplePage({super.key, required this.title});
final String title;
@override
State<StatefulWidget> createState() => _ExamplePageState();
}
class _ExamplePageState extends State<ExamplePage> {
String httpsGetResponse = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(widget.title)),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('http.get: $httpsGetResponse', style: const TextStyle(fontSize: 16, color: Colors.black)),
MaterialButton(
onPressed: () async {
final response = await http.get(Uri.parse('https://www.baidu.com/'));
setState(() {
if (response.statusCode == 200) {
httpsGetResponse = response.body;
} else {
httpsGetResponse = 'Failed to load data';
}
});
},
color: Colors.blue,
child: const Text('发送GET请求'),
),
],
),
),
);
}
}
POST请求
dart
MaterialButton(
onPressed: () async {
Response response = await http.post(
Uri.parse('https://httpbin.org/post'),
body: {
'title': 'http.post',
'data': '这是一个POST请求测试',
},
);
setState(() {
httpsPostResponse = response.body;
});
},
color: Colors.blue,
child: const Text('发送POST请求'),
),
2. 模拟客户端测试(MockClient)
MockClient允许开发者模拟HTTP响应,方便进行单元测试,无需依赖真实网络环境:
dart
import 'dart:convert';
import 'package:http/testing.dart';
import 'package:http/http.dart' as http;
void testMockClient() {
// 测试基本GET请求模拟
var client = MockClient((_) async => http.Response('请求成功', 200));
client.read(Uri.http('example.com', '/foo')).then((body) {
print('模拟GET响应: $body'); // 输出: 模拟GET响应: 请求成功
});
// 测试POST请求模拟
var postClient = MockClient((request) async => http.Response(
json.encode(request.bodyFields), 200,
request: request, headers: {'content-type': 'application/json'}));
postClient.post(Uri.http('example.com', '/foo'),
body: {'field1': 'value1', 'field2': 'value2'}).then((response) {
print('模拟POST响应: ${response.body}'); // 输出: 模拟POST响应: {"field1":"value1","field2":"value2"}
});
// 测试流式请求模拟
var streamClient = MockClient.streaming((request, bodyStream) async {
var bodyString = await bodyStream.bytesToString();
var stream = Stream.fromIterable(['请求体: $bodyString'.codeUnits]);
return http.StreamedResponse(stream, 200);
});
var uri = Uri.http('example.com', '/stream');
var request = http.Request('POST', uri)..body = '测试流式请求';
streamClient.send(request).then((streamedResponse) {
http.Response.fromStream(streamedResponse).then((response) {
print('模拟流式响应: ${response.body}'); // 输出: 模拟流式响应: 请求体: 测试流式请求
});
});
}
3. 多部分表单数据上传(MultipartRequest)
多部分表单数据上传用于发送包含文件和字段的复杂请求:
dart
import 'package:http/http.dart' as http;
import 'package:http_parser/http_parser.dart';
Future<void> testMultipartRequest() async {
var request = http.MultipartRequest('POST', Uri.parse('https://httpbin.org/post'));
// 添加表单字段
request.fields['username'] = 'testuser';
request.fields['email'] = 'test@example.com';
// 添加文本文件
request.files.add(http.MultipartFile.fromString(
'text_file',
'这是一个文本文件内容',
filename: 'test.txt',
contentType: MediaType('text', 'plain'),
));
// 添加二进制数据
List<int> imageBytes = [/* 图像二进制数据 */];
request.files.add(http.MultipartFile.fromBytes(
'image',
imageBytes,
filename: 'test.jpg',
contentType: MediaType('image', 'jpeg'),
));
// 发送请求
var streamedResponse = await request.send();
var response = await http.Response.fromStream(streamedResponse);
print('多部分请求响应: ${response.body}');
}
4. 流式请求和响应处理
流式请求和响应处理适用于处理大型文件或数据,避免一次性加载全部内容到内存:
dart
import 'package:http/http.dart' as http;
Future<void> testStreamedRequest() async {
var client = http.Client();
// 创建流式请求
var request = http.StreamedRequest('POST', Uri.parse('https://httpbin.org/post'));
// 写入请求体
request.sink.add('这是流式请求的'.codeUnits);
request.sink.add('第一部分数据'.codeUnits);
request.sink.add('和第二部分数据'.codeUnits);
request.sink.close();
// 发送请求并获取流式响应
var streamedResponse = await client.send(request);
// 处理流式响应
print('状态码: ${streamedResponse.statusCode}');
print('响应头: ${streamedResponse.headers}');
// 监听响应数据流
String responseBody = '';
await for (var chunk in streamedResponse.stream) {
responseBody += String.fromCharCodes(chunk);
print('接收到数据块,长度: ${chunk.length}');
}
print('完整响应体: $responseBody');
client.close();
}
5. HTTP请求重试机制
RetryClient提供了自动重试HTTP请求的功能,适用于处理网络不稳定的情况:
dart
import 'dart:io';
import 'package:http/http.dart' as http;
import 'package:http/retry.dart';
Future<void> testRetryRequest() async {
// 创建重试客户端
RetryClient retryClient = RetryClient(
http.Client(), // 使用默认的HttpClient
retries: 3, // 设置最大重试次数
);
// 发起HTTP请求
try {
final response = await retryClient.get(Uri.parse('https://www.baidu.com/'));
if (response.statusCode == 200) {
print('请求成功: ${response.body.length} 字节');
} else {
print('请求失败,状态码: ${response.statusCode}');
}
} on HttpException catch (e) {
print('网络异常: $e');
} catch (e) {
print('发生错误: $e');
} finally {
await retryClient.close();
}
}
OpenHarmony平台适配要点
-
网络权限配置 :在
module.json5中添加ohos.permission.INTERNET权限,确保应用可以访问网络。 -
依赖引入:使用AtomGit方式引入HTTP包,确保使用适配OpenHarmony平台的版本。
-
平台兼容性:HTTP测试工具包已经针对OpenHarmony平台进行了适配,可以无缝使用所有功能。
总结
Flutter-OpenHarmony HTTP测试工具包为开发者提供了完整的HTTP客户端测试能力,支持基本请求、模拟测试、多部分上传、流式处理和请求重试等功能。通过该工具包,开发者可以在OpenHarmony平台上高效地进行网络相关的单元测试和集成测试,确保应用的网络功能稳定可靠。
该工具包的主要优势包括:
- 完整的HTTP请求/响应处理能力
- 方便的模拟客户端测试功能
- 支持各种复杂的HTTP请求场景
- 针对OpenHarmony平台进行了优化适配
- 提供清晰的API接口和丰富的使用示例
无论是开发网络应用还是进行单元测试,HTTP测试工具包都是Flutter-OpenHarmony跨平台开发中不可或缺的工具之一。
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net