| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- local air_http = {}
- local test_type = "http_test"
- local url = "http://httpbin.air32.cn"
- -- 读取证书和私钥的函数
- local function read_file(file_path)
- local file, err = io.open(file_path, "r")
- if not file then
- error("Failed to open file: " .. err)
- end
- local data = file:read("*a")
- file:close()
- return data
- end
- -- 读取证书和私钥
- local ca_server = read_file("/luadb/http_ca.crt") -- 服务器 CA 证书数据
- local ca_client = read_file("/luadb/http_client.crt") -- 客户端 CA 证书数据
- local client_private_key_encrypts_data = read_file("/luadb/http_client.key") -- 客户端私钥
- local client_private_key_password = "123456789" -- 客户端私钥口令
- -- 测试用例函数
- function air_http.run_tests()
- -- sys.waitUntil("net_ready")
- local tests = { -- GET 方法测试
- {
- method = "GET",
- url = url .. "/get",
- headers = nil,
- body = nil,
- opts = {},
- expected_code = 200,
- description = "GET方法,无请求头、body以及额外的附加数据"
- }, {
- method = "GET",
- url = url .. "/get",
- headers = {
- ["Content-Type"] = "application/json"
- },
- body = nil,
- opts = {},
- expected_code = 200,
- description = "GET方法,有请求头,无body和额外的附加数据"
- }, {
- method = "GET",
- url = url .. "/get",
- headers = nil,
- body = nil,
- opts = {
- timeout = 5000,
- debug = true
- },
- expected_code = 200,
- description = "GET方法,无请求头,无body,超时时间5S,debug日志打开"
- }, -- GET 方法测试(下载 2K 小文件)
- {
- method = "GET",
- url = "http://airtest.openluat.com:2900/download/2K", -- 返回 2K 字节的文件
- headers = nil,
- body = nil,
- opts = {},
- expected_code = 200,
- description = "GET方法 2K小文件下载"
- }, {
- method = "GET",
- url = "http://invalid-url",
- headers = nil,
- body = nil,
- opts = {},
- expected_code = -4,
- description = "GET方法,无效的url,域名"
- }, {
- method = "GET",
- -- url = "http://invalid-url",
- url = "192.168.1",
- headers = nil,
- body = nil,
- opts = {},
- expected_code = -4,
- description = "GET方法,无效的url,IP地址"
- }, -- POST 方法测试
- {
- method = "POST",
- url = url .. "/post",
- headers = {
- ["Content-Type"] = "application/json"
- },
- body = '{"key": "value"}',
- opts = {},
- expected_code = 200,
- description = "POST方法,有请求头,body为json"
- }, {
- method = "POST",
- url = url .. "/post",
- headers = nil,
- body = nil,
- opts = {},
- expected_code = 200,
- description = "POST方法,无请求头,无body,无额外的数据"
- }, {
- method = "POST",
- url = "clahflkjfpsjvlsvnlohvioehoi",
- headers = nil,
- body = nil,
- opts = {},
- expected_code = -4,
- description = "POST方法,无效的url,域名"
- }, {
- method = "POST",
- -- url = "http://invalid-url",
- url = "192.168.1",
- headers = nil,
- body = nil,
- opts = {},
- expected_code = -4,
- description = "POST方法,无效的url,IP地址"
- }, -- POST 方法测试(上传 30K 大文件)
- {
- method = "POST",
- url = url .. "/post",
- headers = {
- ["Content-Type"] = "application/octet-stream"
- },
- body = string.rep("A", 30 * 1024), -- 生成 30K 的数据
- opts = {},
- expected_code = 200,
- description = "POST 30K大数据上传"
- }, {
- method = "POST",
- url = url .. "/post",
- headers = {
- ["Content-Type"] = "application/x-www-form-urlencoded"
- },
- body = "key=value",
- opts = {
- timeout = 5000
- },
- expected_code = 200,
- description = "POST方法,有请求头,body为json,超时时间5S"
- }, -- HTTPS GET 方法测试(双向认证)
- {
- method = "GET",
- url = url .. "/get",
- headers = nil,
- body = nil,
- opts = {
- ca = ca_server,
- client_cert = ca_client,
- client_key = client_private_key_encrypts_data,
- client_key_password = client_private_key_password
- },
- expected_code = 200,
- description = "HTTPS GET方法,无请求头,无body,带双向认证的服务器证书、客户端证书、客户端key,客户端password"
- }, -- HTTPS POST 方法测试(双向认证)
- {
- method = "POST",
- url = url .. "/post",
- headers = {
- ["Content-Type"] = "application/json"
- },
- body = '{"key": "value"}',
- opts = {
- ca = ca_server,
- client_cert = ca_client,
- client_key = client_private_key_encrypts_data,
- client_key_password = client_private_key_password
- },
- expected_code = 200,
- description = "HTTPS POST方法,有请求头,body为json,带双向认证的服务器证书、客户端证书、客户端key,客户端password"
- }}
- local tests_len = #tests
- local len = 0
- local pass = true
- local failing_item = nil
- local test_mode
- for i, test in ipairs(tests) do
- len = len + 1
- lcd.clear()
- local code, headers, body = http.request(test.method, test.url, test.headers, test.body, test.opts).wait()
- -- 调试输出
- print(string.format("Test %d: %s", i, test.description))
- print("Returned values: code =", code, ", headers =", headers, ", body =", body)
- -- 验证返回值
- if code == test.expected_code then
- log.info("本次测试的是", test.description, "code 符合预期结果 code = ", code)
- -- lcd.drawStr(50,50,"testrady")
- lcd.drawStr(10, 200,
- string.format("本次测试的是%s,code符合预期结果code=%d", test.description, code))
- else
- log.info("本次测试的是", test.description, "预期结果为", test.expected_code,
- "code 不符合预期结果 code =", code)
- lcd.drawStr(50, 50,
- string.format("本次测试的是%s,code不符合预期结果code=%d", test.description, code))
- pass = false
- failing_item = test.description
- -- break
- end
- sys.wait(5000)
- --http所有测试项目完成
- if len == tests_len then
- lcd.clear()
- log.info("测试结束")
- lcd.drawStr(50, 50, "测试结束")
- if pass then
- test_mode = "测试所有项目通过"
- log.info(test_mode)
- lcd.drawStr(70, 40, test_mode)
- else
- test_mode = "测试有项目未通过"
- log.info("测试有项目未通过")
- lcd.drawStr(70, 60, "测试有项目未通过")
- lcd.drawStr(100, 80, "失败的项目是:" .. failing_item)
- end
- local data = {
- type = test_type,
- test_mode = test_mode,
- test_end = pass or failing_item,
- fail_res = pass or "code不符合预期结果code=" .. code,
- imei = mobile.imei()
- }
- local data = json.encode(data)
- sys.publish("OTHER_FILE_SENDMSG",data)
- -- sys.wait(5000)
- break
- end
- end
- end
- return air_http
|