Selenium selenium+python 如何请求接口和获取接口返回值?

醋精测试媛 · 2020年12月01日 · 最后由 醋精测试媛 回复于 2020年12月01日 · 31 次阅读

之前写接口测试用的时 JAVA,现在 selenium 进行 UI 测试,需要对比后端返回的数据和页面显示的数据,请问这个情况下如何请求接口呢?

我尝试了 requests,可是需要 header,header 的获取不知道该怎么办呢?

附言 1  ·  2020年12月01日

下面是更新的一个具体的问题:

搜索的测试用例包括空搜索,包括特殊搜索,包括按条件搜索……

我如何知道搜索的结果是否正确? 是否要去数据库或者接口取得数据?
如果是从接口取数据,应该如何取?

最佳回复
guolong123 回复

看了你上面的附言,感觉你这就是接口测试啊,你如果想知道数据是否正确,直接使用接口测试测试接口啊。你这用 ui 测试,用接口进行验证本身就是重复的啊,开发写的代码也是在调用后台接口,你也是在调用后台接口,如果参数都一样,返回也是一样的,起不到任何验证的作用。只能通过数据库查询来验证。 实际上 ui 自动化侧重于功能是否可用,而不在于验证数据是否可靠上面,数据是否正确应该放在接口测试上。

共收到 20 条回复 时间 点赞

你在 web 端发起一个请求,里面的 headers 传什么你就传什么

当我在 web 端发起请求,header 需要鉴权信息时,我如何知道鉴权信息是多少呢?【前提,正处于 ui 自动化测试中】

你后端返回的数据和你自己请求的接口返回的数据对比?难道后端不是请求的同一个接口吗?为啥还需要对比?

guolong123 回复

请求后端的数据与页面显示做对比,不是可以测 ui 吗

鉴权信息是指 token?cookies?

bearer token

你可以在 html 代码上看下,可能会有记录到 token,或者是登录成功之后会响应信息中会带一个 token,如果你实在找不到你问下你们开发他是怎么拿到的

那现在就姑且人为后台接口是没问题的。你需要验证的点是后台返回的数据前端是否正常显示。基于这个目的,你只要拿到前端请求后台的接口数据做对比就好了。监控接口请求可以使用抓包工具......,刚好我今天提交了一次自动抓包的工具,希望你能用得上。https://gitee.com/guojongg/api2har

我知道,会在 F12 的 network 的 request header 可以拿到,但是我希望在 ui 自动化测试中拿到

guolong123 回复

抓包是:比如我点击搜索,抓取到这个操作的那个包吗,那这样数据肯定是对的呀,这样做是否无意义?

其实我也在考虑从接口获取数据然后验证 ui 上的数据是否正确是否有合适的方法。

比如现在搜索功能,selenium 自动搜索空,点击搜索,出来的是全部的数据,我如何验证这个全部数据是正确的呢?

UI 测试过程中需要抓包建议使用抓包工具来获取接口返回的 token,推荐使用 mitmproxy。也可以做模拟的接口返回数据进行 UI 测试

。。。无语了,你好像不是很理解我的话,打个比方,假如你请求的时候的 token 是来自于你登录之后的响应内容,那么你就要先请求一下登录接口,然后在他的响应内容中拿到这个 token 然后存起来,到你发起获取页面信息的请求的之前,在请求的 headers 中再加上之前拿的这个 token

登录是自动化登录的,通过 selenium,不是接口测试,是 selenium UI 自动化测试

问题是,你是不是想在 ui 脚本执行过程中又通过 requests 发请求获取数据?

这个问题可以分为两个部分:

  1. 搜索请求接口的测试,测试接口请求返回的数据是否正确。 ----这个可以采用接口测试.
  2. UI 界面上对于给定的数据,是否显示正确。 -----这个可以用 UI 测试,后端要不使用造数据,要不就 Mock.

如果 1OK 了,那么 2 可以使用造数据或者 Mock. 如果 1 不 OK,那么 2 可以使用 Mock.

感觉不理解你到底想测什么了,你如果只是想验证搜索结果是否正确应该直接在 selenium 代码中写断言啊,跟接口测试有什么关系呢?

guolong123 回复

看了你上面的附言,感觉你这就是接口测试啊,你如果想知道数据是否正确,直接使用接口测试测试接口啊。你这用 ui 测试,用接口进行验证本身就是重复的啊,开发写的代码也是在调用后台接口,你也是在调用后台接口,如果参数都一样,返回也是一样的,起不到任何验证的作用。只能通过数据库查询来验证。 实际上 ui 自动化侧重于功能是否可用,而不在于验证数据是否可靠上面,数据是否正确应该放在接口测试上。

如果要获取 token 的话,可以试下用 JS 获取; token = driver.execute_script('return localStorage.getItem("token");') 不过你要 F12 看一下,是 localStorage 还是 SessionStorage

卡卡洪 回复

得到的不是一个东西哦

是的。。。是不是不太可能实现

醋精测试媛 关闭了讨论 12月02日 00:39
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册