• 接口自动化测试(一)


    一. 接口和接口测试

    1. 接口是啥? ===== 传递数据的通道

    接口测试:是测试系统组件间接口的一种测试

    接口测试主要包括:同一个系统中模块与模块间的接口,另一个是跨系统平台与平台间的对接(内部接口、外部接口)

    接口类型:

    • HTTP接口:通过GET或POST来获取数据,在数据处理上效率比较高

    • Webservice接口:通过soap协议来获取数据,比起http来说能处理更加复杂的数据类型

    二. MVC模式

    测试系统结构:MVC模式(Model模型、View视图、Control控制器)

             前台页面—后台服务数据交互

    M:Model,指的是数据库

    V:View,指用户看到的视图(呈现页面)

    C:Control,逻辑层面,用于M和V之间的交互,接口就是在Control层

    三. 客户端和服务器如何建立通信

    四. 浏览器中查看接口信息

    1. 接口包含的信息:接口地址、请求方法、请求数据、返回数据

    2. chrome浏览器,在操作页面的时候,查看与后台的数据交互

    F12—Network—Preserve log—XHR

    3. 接口通信数据类型:JSON、XML

    定义通信协议

    五. http通信

    请求行:

    请求的协议类型、协议版本、请求方法、资源地址

    例:get XXXXXX.html http/1.0

    消息头(header):

    【空行】:

    消息体(body):

    响应数据(response):

      状态行、消息头(header)、【空行】、消息体(body)

    以快递盒为例:快递单—消息头     快递盒里的东西—消息体

    六. http通信—状态码

    状态码由三位数字组成,第一个数字定义了响应的类别,共分为五种类别:

    1xx:指示信息—表示请求已接收,继续处理

    2xx:成功—表示请求已被成功接收、理解、接受

    3xx:重定向—要完成请求必须进行更进一步的操作

    4xx:客户端错误—请求有语法错误或请求无法实现

    5xx:服务器端错误—服务器未能实现合法的请求

    常见状态码:

    200 OK          客户端请求成功

    400 Bad Request      客户端请求有语法错误,不能被服务器所理解

    401 Unauthorized     请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用

    403 Forbidden        服务器收到请求,但是拒绝提供服务

    404 Not Found        请求资源不存在,eg:输入了错误的URL

    500 Internal Server Error    服务器发生不可预期的错误

    503 Server Unavailable    服务器当前不能处理客户端的请求,一段时间后可能恢复正常

    七. 接口测试要点

    • 检查接口返回的数据是否和预期结果一致

    • 检查接口的容错性,假如传递数据的类型错误时是否可以处理。例如上面的例子是支持整数,传递的是小数或字符串呢?

    • 接口参数的边界值。例如,传递的参数足够大或为负数时,接口是否可以正常处理

    • 接口的性能,接口处理数据的时间也是测试的一个方法。牵扯到内部就是算法和代码的优化   ------响应时间多与少10s,易用性

    • 接口的安全性,如果是外部接口的话,这点尤为重要

    测试思维相同

    八. 实例

    以课堂派课堂详情页面为例

    import requests
    
    url = "https://www.ketangpai.com/StudentsV2/classDetail/courseid/MDBwMDAwMDAwMLOGy9yHz7ev"
    
    params = {"courseid": "MDBwMDAwMDAwMLOGy9yHz7ev"}
    
    res = requests.request("get", url, params=params)
    
    print(res.status_code)
    print(res.text)

    得到的结果是,可以看到并没有获得数据(后面将增加cookies)

    200
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
    <html>
    <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta http-equiv="X-UA-Compatible" content="IE=9" />
    <title>登录-简单好用的互动课堂管理工具</title>
    <meta name="keywords" content="课堂派、LMS、PPT互动、课中互动、助教神器、老师神器、作业收发系统、作业批改、在线作业、杜绝作业作弊">
    <meta name="description" content="教学改革,互动课堂,你可以在这里,组织课中互动,PPT互动,快速发布作业、在线批阅作业、作业查重、统计成绩,随时与你的学生进行沟通,是老师,教务管理的好帮手。" />
    <link href="/favicon.ico" type="image/x-icon" rel="shortcut icon" />
    <link href="/Public/Common/js/lib/layer/skin/layer.css?v=2018071402" rel="stylesheet" type="text/css">
    <script src="/Public/Common/js/sea.js?v=2018071402" id="seajsnode"></script>
    <script src="/Public/Common/js/config/config.js?v=2018071402"></script>
    
    <link href="/Public/Common/css/main.css?v=2018071402" rel="stylesheet" type="text/css" />
    
    <link rel="stylesheet" href="/Public/Home/css/login.css?v=2018071402"/>
    
    </head>
    <body>
        <div id="indextop" class="header  header-theme-none">
        <div class="logo fl">
            <a href="/"></a>
        </div>
        <div class="nav fl">
            <a href="/" target="">首页</a><a href="/index/mobile.html" target="">移动端</a><a href="/index/aplus.html" target="">申请机构版</a><a href="/VipActivity/pay" target="_blank">会员</a><a href="/help/index.html" target="">帮助中心</a>    </div>
        <div class="log-reg fr">
            <a href="/User/login.html" class="login">登录</a>
            <a href="/User/register.html" class="regist">注册</a>
        </div>
        </div>    
        <div class="reg-log">
            <div class="login-box" id="wechatLogin" data-domain="www">
                <a href="javascript:;" class="wechatlogin-return"></a>
                <div class="wechat-container" id="login_container">
                </div>
            </div>
            <div class="login-box" id="login">
                <div class="title items">
                   <a href="javascript:;" class="active">普通登录</a>
                   <a href="javascript:;">手机短信登录</a>
                   <a href="javascript:;">微信登录</a>
                </div>
                <div class="padding-cont pt-login">
                    <div class="input">
                        <span>账号:</span>
                        <input type="text" autocomplete="off" name="account" placeholder="邮箱/账号/手机号">
                    </div>
                    <div class="input">
                        <span>密码:</span>
                        <input type="password" autocomplete="off" name="pass">
                    </div>
                    <div class="opt clearfix">
                        <a href="javascript:;" class="auto-login fl">下次自动登录</a>
                        <a href="/User/forgetpassword.html" class="forget fr">忘记密码?</a>
                    </div>
                    <a href="javascript:;" class="btn-btn">登录</a>
                </div>
                <div class="padding-cont tel-login hide">
                    <div class="input">
                        <span>手机号:</span>
                        <input type="text" autocomplete="off" name="tel">
                    </div>
                    <div class="yzm-box clearfix">
                        <div class="input fl">
                            <span>验证码:</span>
                            <input type="text" autocomplete="off" name="yzm">
                        </div>
                        <a href="javascript:;" class="get-yzm">获取验证码</a>
                    </div>
                    <div class="opt clearfix">
                        <a href="javascript:;" class="auto-login fl">下次自动登录</a>
                        <a href="/User/forgetpassword.html" class="forget fr">忘记密码?</a>
                    </div>
                    <a href="javascript:;" class="btn-btn">登录</a>
                </div>
                <a class="qr-sj"></a>
            </div>
            
            
        </div>
    
        <div class="footer">
        <div class="cWidth">
            <div class="nav clearfix">
                <a href="/index/abouts.html">关于我们</a>
                <a href="/index/contact.html">联系我们</a>
                <a href="/index/service.html">服务条款</a>
                <a href="/index/older.html" target="_blank">浏览器下载</a>
                <a href="/index/updateDynamics">更新动态</a>
            </div>
            <p>Copyright © 2014 ketangpai.com All Rights Reserved. 京ICP备14023276号-4</p>
            <div class="img-box">
                <a target="_blank" href="https://ss.knet.cn/verifyseal.dll?sn=e14051511000002327612183092&comefrom=trust&trustKey=dn&trustValue=ketangpai.com">
                    <img src="/Public/Home/img/kx.png">
                </a>
                <a target="_blank" href="http://webscan.360.cn/index/checkwebsite?url=ketangpai.com">
                    <img src="/Public/Home/img/360.png">
                </a>
            </div>
        </div>
    </div>    <span style="display: none">
    <img src='//ketangpai-nginx-log.cn-hangzhou.log.aliyuncs.com/logstores/mainwebhttplog/track_ua.gif?APIVersion=0.6.0&uid=0'/>
    </span>
        
    <script src="//res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
        <script>
            seajs.use('/Public/Home/js/indextop.js',function(ex){
                ex.loginAll();
            });
        </script>
    
        <script type="text/javascript">seajs.use('/Public/Home/js/thirdheader.js',function(ex){ex.headerActive();});</script>
    </body>
    </html>

    需要注意的是,request方法的动态参数要以key=value的形式传入,get请求的key是params,post请求是data,value必须写成字典的形式

  • 相关阅读:
    centos7下vi的用法
    jQuery的hover方法搭配css的hover选择器,实现选中元素突出显示
    CSS3弹性伸缩布局(下)——flex布局
    什么是架构设计
    界面底部Tab实现
    一行代码实现圆形头像
    免费快速制作个人简历
    基于JS的问卷调查
    基于CSS的个人网页
    纯HTML课表
  • 原文地址:https://www.cnblogs.com/my_captain/p/9313655.html
Copyright © 2020-2023  润新知