Robot Framework中如何正确保存并对比sslscan命令输出?
解决sslscan输出获取与密码验证问题
错误原因
你遇到的报错核心是Robot Framework Process库的Run Process返回对象没有output属性,正确存储命令标准输出的属性是stdout。同时代码里还有两处小问题:
- Log语句引用了未定义的
${output}变量 - 关键字调用时大小写不匹配(
Check secureCiphers和定义的Check Secure Ciphers不一致)
修正后的完整代码
*** Settings *** Library OperatingSystem Library Process *** Variables *** ${endpoint} myendpoint.com *** Test Cases *** Check ciphers ${secure_ciphers} = Create list ECDHE-RSA-AES128-GCM-SHA256 DHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES256-GCM-SHA384 ${insecure_ciphers} = Create list ECDH aNULL eNULL # 执行sslscan命令,获取执行结果对象 ${result} = Run process sslscan --no-cipher-details --no-compression --no-fallback --no-groups --no-heartbleed --no-colour ${endpoint} shell=True # 提取标准输出并转成字符串(避免bytes类型问题) ${stdout} = Convert To String ${result.stdout} Log SSLScan Output: ${stdout} # 调用关键字时保持大小写一致 Check Secure Ciphers ${stdout} ${secure_ciphers} Check Insecure Ciphers ${stdout} ${insecure_ciphers} *** Keywords *** Check Secure Ciphers [Arguments] ${output} ${secureCiphers} FOR ${cipher} IN @{secureCiphers} Log Checking secure cipher: ${cipher} Should Contain ${output} ${cipher} END Check Insecure Ciphers [Arguments] ${output} ${insecureCiphers} FOR ${cipher} IN @{insecureCiphers} Log Checking insecure cipher: ${cipher} Should Not Contain ${output} ${cipher} END
额外优化建议
- 验证命令执行状态:添加返回码检查,确保sslscan成功运行
Should Be Equal As Integers ${result.returncode} 0 sslscan命令执行失败 - 精准匹配密码:如果只需要验证特定TLS版本的密码,可以先提取对应段落,比如只取TLSv1.2的部分:
${tls12_section} = Get Lines Containing String ${stdout} TLSv1.2 - 处理编码异常:如果
Convert To String报错,可指定编码格式:${stdout} = Convert To String ${result.stdout} encoding=utf-8
内容的提问来源于stack exchange,提问作者BraveAdmin
相关产品推荐
相关产品推荐

