zoukankan      html  css  js  c++  java
  • 5、大型项目的接口自动化实践记录----登录

    练完手,我们就开始对ERP实际业务做自动化,先来看一下登录

    因为没有接口文档,所以我们要自己手工去抓下包,这里用fiddler

    一、登录接口抓包

    1、清除缓存

    在抓包前,先清除浏览器缓存,以免后面抓到过多没用的数据(可以自行试下不清的情况下抓包)

    清除方式如下图,F12->缓存->清除域的Cookie


     

    抓包

    fiddler的相关配置,网上很容易搜到,这里不做介绍

    1)打开fiddler,打开浏览器,访问登录页面


     

    从页面上,我们可以看到的入参包括:

        登录类型:域账户、ERP账户

        用户名

        密码

        登录日期

    2)前端登录,查看抓到的包


     

    抓到了5个请求,第一个为访问登录页面,第二个为登录,中间经过三次重定向,最后访问网站主页

    2、登录请求

    我们要登录,所以看一下第二个请求

        先看请求头:

            除了前面说到过的请求头信息Content-Type、User-Agent外,发现还有一个ssosessionid


     

        再看一下请求的data:

            同样发现除登录类型、用户名、密码、日期外,多了几个参数

            service:要登录的地址(因为有多个分支环境)

            _eventId、submit、languageid这三个参数比较好理解,也没什么用

            lt、execution前端也没有填,哪里来的呢?


     

    综上,多了三个非预期的入参lt | execution | ssosessionid,去看一下访问登录页面的请求,是不是那时候给了这三个值

    3、访问登录页面

    1)ssosessionid获取

    看了下第一个请求返回的cookies信息,果然是这个时候服务器给的

    PS:这里是因为访问SSO(单点登录系统),对方会给一个sessionid


     

    2)lt、execution获取

    看完返回的cookies,里面没有lt、execution,我们再看一下返回的文本视图TextView,果然看到了lt、execution

    PS:这里似乎是开发使用的框架自己带的效果


     

    二、登录实现

    1、登录接口信息

    前面把登录所需要的信息都抓到了,先汇总一下

        URL:https:xxx.com:端口号

        URI:/sso/login

        cookies:ssosessionid(访问登录页时返回)

        headers:用默认请求头即可,x-requested-with=XMLHttpRequest Content-Type=application/x-www-form-urlencoded User-Agent=Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Win64; x64; Trident/6.0)

        入参:

            ①service、ldap_login、username、password、usertype(登录填写)

            ②lt、execution(访问登录页返回)

            ③_eventId、submit、languageid(无用信息)

        预期返回:JSESSIONID

    2、登录实现

    1)先访问登录页面,获取ssosessionid、lt、execution

    如下图,先访问登录页,获取ssosessionid、lt、execution

    其中get请求方法,封装了Create Session、Get Request等,见上一篇


     

    ssosessionid:${resp.cookies['ssosessionid']}

    lt、execution:

        ①先通过正则,re.findall('name="lt" value="[^/]*','''${resp.text}'''),获取从name开始,到第一个/前的文本

    PS:前端返回的文本如下,即name="lt" value="LT-229-lNR4cCzNk5oBveR1bzNRObNKH2HpIb-cas01.example.org"


     

        ②然后根据符号"分割上面的文本,分割结果为list:string.Split    “

        ③从list里获取该值,${tmp2[-2]}

    2)用获取到的信息,登录


     

     

    ①service、ldap_login、username、password、usertype以及登录的URL(作为参数传入)

    ②lt、execution、ssosessionid用1)中的方法获取

    ③使用以上的信息请求,并获取返回的jsessionid

    3)多环境登录配置

    前面实现了单个环境登录,而我们存在多个环境,各个环境有个默认测试用账号

    如下图,构建配置信息

    新增变量,变量名格式:端口号_变量名


     

    如下图,URL、Service变量=${${端口号}_变量名},${端口号}作为参数传入,如xx56,则URL=${xx56_URL_登录},即可对上我们上面的配置的变量名,取到对应的值。

    username、password设置默认值为None,如果不传,则用我们配置的默认账号,如果传则使用传入的


     

    4)配置信息分离

    以上实现了多环境的登录,但是可以看到,登录需要用到的data、cookies等都是揉在一起的,如果data一些字段默认值修改,或者地址变更,用户名密码变化,维护不方便,因此我们可以把配置信息分离

        ①地址、用户名密码等配置信息分离,3)中已经实现

        ②登录的data分离


     

        ③cookies分离


     

        ④使用分离后的方法登录


     

     

    PS:以上分离可能看起来没什么必要,这是因为登录功能比较简单,养成习惯,因为后面功能会复杂很多。

    上一篇  4、大型项目的接口自动化实践记录----数据分离
    下一篇  6、大型项目的接口自动化实践记录----订单新增

  • 相关阅读:
    关于 Kubernetes 中的 Volume 与 GlusterFS 分布式存储
    使用 Kubeadm 升级 Kubernetes 版本
    Kubernetes 中的核心组件与基本对象概述
    使用 Kubeadm 安装部署 Kubernetes 1.12.1 集群
    比较 Spring AOP 与 AspectJ
    关于 Spring Security OAuth2 中 CORS 跨域问题
    Prometheus 入门与实践
    MySQL 分支的选择:Percona 还是 MariaDB
    Spring Boot 集成 Swagger2 与配置 OAuth2.0 授权
    关于 Spring Security 5 默认使用 Password Hash 算法
  • 原文地址:https://www.cnblogs.com/walkingtester/p/11280657.html
Copyright © 2011-2022 走看看