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

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

之前写接口测试用的时 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日 08:39
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册